How to resize an image in sharp with the option 'contain' but preserve the aspect ratio of the original dimensions?
10,648
Keep either width
or height
so that the Sharp will maintain the ratio
Below the height will maintain its ratio when resizing;
await sharp(image)
.resize({
fit: sharp.fit.contain,
width: 800
})
.jpeg({ quality: 80 })
.toBuffer()
Related videos on Youtube
Author by
user1031947
Updated on June 04, 2022Comments
-
user1031947 about 2 years
I have a 1000px by 750px image.
I use lovell/sharp to resize it:
await sharp(image) .resize({ fit: sharp.fit.contain, width: 800, height: 800 }) .jpeg({ quality: 80 }) .toBuffer()
This results in a new image that is 800px by 800px, with the original image 'contained' inside of that region.
What I would really like is to have a final image that is 800px by 600px. IOW, to resize the image and preserve the aspect ratio.
I realize it is possible to do this by specifying only a width. However it is useful to have a bounding box to contain the resized image in, to avoid creating images greater than a certain height.
Can I do this in sharp with different settings?
-
user1031947 over 4 yearsermagherd, shoulda just checked the docs first: github.com/lovell/sharp/blob/master/docs/api-resize.md sharp.fit.inside
-
-
Methodician over 2 yearsThis is precisely what we are trying to achieve. Should be accepted answer. (didn't need the quality setting not sure it's relevant)
-
Christos Lytras about 2 yearsThis should be the accepted answer. @Methodician the quality setting comes from the OP code; when answering questions, it's most likely and recomended to use and refactor the code that the OP contains.