使用 Sharp 压缩图像大小而不改变图像的纵横比
Posted
技术标签:
【中文标题】使用 Sharp 压缩图像大小而不改变图像的纵横比【英文标题】:Using Sharp to compress image size without changing aspect ratio of the image 【发布时间】:2019-01-03 16:22:56 【问题描述】:我有一个 aws 图像文件,我正在使用 sharp 压缩图像,但压缩后,文件大小急剧增加。就我而言,我的图像大小为 6.5MB ,压缩后变为 19.5MB。
以下是我的代码:
const width = parseInt(image.height);
const height = parseInt(image.width);
var getObjectParams =
Bucket: BUCKET,
Key: FILE_NAME
s3.getObject(getObjectParams).promise()
.then(data =>
sharp(data.Body)
.resize(width, height)
.ignoreAspectRatio()
.toFormat('png')
.toBuffer()
.then((buffer) =>
........
........
我什至尝试过使用.max()
,
sharp(data.Body)
.withoutEnlargement()
.resize(width, height)
.toFormat('png')
.toBuffer()
同样的问题,文件大小在增加。在我的情况下,应该保持图像纵横比。任何建议,将不胜感激。谢谢
【问题讨论】:
你已经在github.com/lovell/sharp/issues 上问过这个问题了吗?如果没有,请这样做,因为作为一个开源库,这确实是第一个要问的地方。 @Mike'Pomax'Kamermans 是的,我在 github 上问过 github.com/lovell/sharp/issues/1307 好。看起来你会想在那里编辑你的问题,github有不同的代码格式格式(SO使用缩进,GH在你的代码块之前和之后使用```) @Mike'Pomax'Kamermans,谢谢你的建议,我会调查一下 【参考方案1】:这是Sharp
的一个常见问题,但这是一个很棒的包。阅读Sharp
documentation 获取png
。
如果您需要玩耍;
options.quality
,options.colours
,options.dither
压缩大量的任何 PNG 图像,并根据其文档,
需要编译支持 libimagequant 的 libvips
所以你需要libimagequant
的帮助来实现你的目标。
据该网站称,libimagequant 是一个小型、可移植的 C 库,用于将 RGBA 图像高质量转换为 8 位索引颜色(调色板)图像。
相反,您可以使用this NPM PACKAGE called imagemin,我相信它使用相同的方法来压缩 PNG 图像。使用下面的一小段代码,你可以减小 PNG 的大小。
const files = await imagemin(['images/*.png'],
destination: 'build/images',
plugins: [
imageminJpegtran(),
imageminPngquant(
quality: [0.6, 0.8]
)
]
);
使用quality: [0.6, 0.8]
像quality: [0.2, 0.2]
来减少大小,你可以传递一个像const files = await imagemin(['fileName.png']
这样的图像文件
【讨论】:
以上是关于使用 Sharp 压缩图像大小而不改变图像的纵横比的主要内容,如果未能解决你的问题,请参考以下文章
图像的 UIPageViewController 如何在方向改变时保持图像的纵横比?