有什么 JPG 压缩库 可以达到接近 TinyPNG 的效果

2021-03-22 16:50:52 +08:00
 abelyao
一张 23.8M 的照片,通过 TinyPNG 可以压缩到 2M,但 Tinify API 限制每月 500 次免费,限制手头上有将近 20000 张图要处理。

试过 node.js 的几个库,包括:
- sharp
- imagemin + jpegtran
- imagemin + mozjpeg

如果指定输出质量在 100 则顶多就比原图小 1-2M,和 TinyPNG 对比还是差异巨大。虽然不知道 TinyPNG 压缩后的 jpg 质量是多少,但肉眼看的差距极其细微。

各位大佬有没有什么压缩 jpg 的库推荐一下,node.js / php / c-sharp 的都可以,或者桌面软件也行。

最好最好,希望是大佬亲自使用过、对比过的,非常感谢!
3386 次点击
所在节点    问与答
29 条回复
66beta
2021-03-22 17:04:53 +08:00
jpg 压缩损失巨大
参考同类问题: https://www.v2ex.com/t/508416

photoshop 的批处理考虑一下,质量选 70 感觉是极限了
alexkkaa
2021-03-22 17:13:38 +08:00
输出质量在 100, 你这个要求体积没办法缩啊。
abelyao
2021-03-22 17:28:42 +08:00
@alexkkaa @66beta

就如我在主贴说的,我不确定 TinyPNG 给的图片质量是多少,但无论我设置多少输出质量,要么比 TinyPNG 的结果大很多、要么比它失真很多。

换而言之,如果我选定一个肉眼上看起来跟 TinyPNG 结果差不多的质量,那图片体积可能是 TinyPNG 的三五倍;而如果选一个体积差不多的质量,则肉眼可见的失真非常大。

所以很头疼…
66beta
2021-03-22 17:30:42 +08:00
@abelyao PNG 损失少很多,你现在是 jpg,就很难了
youthfire
2021-03-22 17:42:20 +08:00
有没有试过 ImageOptim,质量控制在 90%或者 80%?
lonewolfakela
2021-03-22 17:53:51 +08:00
先确认一个问题:当你说“TinyPNG”的时候,你是不是其实想指的是 tinypng 网站上提供的 jpg 压缩功能而不是 png 压缩功能,或者换句话说,你想要的(以及在题目里作为对比的)其实是 TinyJPG ?
dawangyezi
2021-03-22 17:55:13 +08:00
从文件格式角度比较好解释这个问题:

* jpg 是基于整个图像中的区块使用压缩算法压缩后保存的。
* png 文件标准中有多种格式
o 调色板模式。文件头保存一个颜色表,然后保存每个像素的时候只存储颜色表索引
o 灰度图模式,如果你的图像是灰度的(有亮度的黑白),只需要保存每个像素点的亮度。
o 二值模式。假设你的图像只有黑和白,比如曲谱。那你可以用 1 个 bit 位保存一个像素点。
o 全彩模式,和 jpg 相同。
o 动图

因为日常使用的 png 大多是全彩模式的。tinyPNG 后端应使用的 pngquant 命令行工具或者相同的算法,将全彩模式的 png 图转换成调色板模式。这样,就可以通过减少颜色数量来达到降低质量,压缩图片的目的。

如果你确实有批量压缩质量的需求,可以先用工具批量转换成 png 再压缩图像质量。
批量处理图像可以用 imgmagic 工具组
lonewolfakela
2021-03-22 17:57:35 +08:00
@zhangyufei49 虽然楼主说的是 TinyPNG,但是我严重怀疑他一直就是指的是 TinyJPG,因为他说了什么“TinyPNG 压缩后的 jpg 质量”之类的。所以整个帖子的问题和 PNG 其实没啥关系,就是想找个好点的 JPEG 优化编码工具
wdy3334
2021-03-22 18:00:46 +08:00
TinyPNG 有 ps 插件版吧 那个没有限制次数吧
dawangyezi
2021-03-22 18:03:22 +08:00
再补充几个实用的说明:

1. 怎么选择用 png 还是 jpg
如果有透明通道,就用 png 。没有透明通道,图片中的颜色又很多,比如拍摄的大自然风景,用 jpg 。

2. 怎么选择 png 模式

颜色数量很少,有大面积的色块。比如动漫卡通,用调色板模式。
黑白照片,用灰度模式。
用作游戏动画中的遮照层,或者黑白曲谱(不需要抗锯齿),AI 轮廓识别,用二值图。
全彩模式适用日常图片。尤其在游戏和 app 资源中适用。
abelyao
2021-03-22 18:34:50 +08:00
@lonewolfakela

其实我用的是 Tinify 这个域名的接口,因为 TinyPNG / TinyJPG 在线版限制最大图片体积为 5M 。

TinyPNG 和 TinyJPG 都是他们的品牌而已,实际不管通过哪个入口,都能压缩 jpg 图片,这里仅寻求 jpg 图片的压缩方案。
abelyao
2021-03-22 18:37:08 +08:00
@youthfire

试过的,在 ImageOptim 的选项界面可以看到,它在处理 jpg 时,也是用的我在主帖提到的两个插件,结果一样。
abelyao
2021-03-22 18:41:00 +08:00
@wdy3334

谢谢回复复。我希望优先寻找能集成在程序中的办法,因为还有其它自动化流程要做。

另外我也不确定那个 PS 插件是不是联网处理的,如果是联网处理,上万张图上传再下载,也不是很优雅…
love
2021-03-22 18:44:21 +08:00
mozjpeg 为何要指定质量为 100 ??就不能指定到你能看出区别的分界点看看和 tinypng 大小差多少? tinypng 绝对不可能是 100
dawangyezi
2021-03-22 18:49:59 +08:00
@lonewolfakela 了解了, 那可以用这个: https://www.picdiet.com/zh-cn
dawangyezi
2021-03-22 18:54:21 +08:00
@zhangyufei49 tinypng 压缩后的质量不是 100,放到到一定倍数就能看出来和原图的差异。你用的 imagemin + mozjpeg 就挺好,
dawangyezi
2021-03-22 18:59:00 +08:00
@abelyao 可以用 imgemin + mozjpeg 这个方案。我对比了 tinypng 输出的颜色数量,你可以把质量调整到 65 - 70 之间
superrichman
2021-03-22 19:01:21 +08:00
irfanview 转图片,里面能转各种格式,还有一堆参数,自己去折腾看哪个组合合适。
abelyao
2021-03-22 19:24:51 +08:00
@love 看我在 #3 的回复
oott123
2021-03-22 20:23:42 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/764004

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX