我有几个大小为 32MB 的图像,我想将它们的大小从 32MB 更改为 100Kbs 或任何 KB 大小而不影响其颜色。
我正在尝试的命令是:
muhammad@muhammad-mohsin:~/scans$ find . -iname '*.png' -exec mogrify -format jpg "*.png" {} +
muhammad@muhammad-mohsin:~/$ find . -type f -iname \*.png -delete
muhammad@muhammad-mohsin:~/$ find . -iname '*.jpg' -exec mogrify -define jpeg:extent=300kb -strip -quality 90 -scale 90% *.jpg {} +
在这里,首先我将 PNG 转换为 JPG,将其大小从 32Mbs 减小到 5.8Mbs,一切都保持不变,但是当我使用第三个命令时,它会删除图像中的背景颜色并使其灰度有点模糊。
但是,文本仍然可读,但颜色和背景徽标不可读。
我如何使用 convert、mogrify 或任何其他工具来实现这一点?到目前为止,我尝试了所有可能的事情。
这是因为 JPEG 压缩的工作原理。它尝试将彼此相似的相邻像素舍入为相似值。这会导致细节丢失和块状。
当您增加压缩级别时,这变得更加明显,这正是您正在做的事情。此外,您分两步进行:
通过在最终质量下从无损到有损,您可能会获得更好的结果,因此只应用有损压缩一次,例如
jpeg:extent=300kb -strip -quality 90 -scale 90%
在第一次转换中使用。此外,您对图像的大小和细节水平只字未提。将其降低到 300kB 并保持所需的质量可能是不可行的。
为了消除背景斑点,您可以尝试在某些图像编辑软件中对文档应用阈值,例如,将小于某个灰色阴影的任何内容强制为白色。
但是,无论您做什么,从 30MB 无损格式压缩到 300kB 有损格式都会导致质量明显下降。
参考。https://superuser.com/questions/71028/batch-converting-png-to-jpg-in-linux
将我的示例 31MB.png 转换为 1.4MB.jpg 。...您可能必须重复例如
$ ls -1 *.PNG | ...
等。参考。@steeldriver 评论:“稍微好一点的是
xargs -d '\n' -n 1
”