ImageMagick:缩放具有最大文件大小的JPEG图像

kun*_*gcc 52 imagemagick

我有一些JPEG图片,我想缩小.另一个要求是文件大小不应大于300kByte.

这是可能的,请帮我一个例子=)

Kur*_*fle 79

要将生成的图像限制为最大文件大小,可以使用命令行参数-define jpeg:extent=max_value,如下所示:

convert original.jpeg -define jpeg:extent=300kb output.jpg
convert original.jpeg -define jpeg:extent=300kb -scale 50% output.jpg
convert original.jpeg -define jpeg:extent=300kb [...other options...] output.jpg
Run Code Online (Sandbox Code Playgroud)

请注意,这并不总是能够匹配您想要的确切大小.您可能要求输出大小为40kb,输入为300kb,结果为48kb.


(更新/说明:输出文件大小可能略低于或高于文件请求的大小.)

  • 这似乎只影响品质因数,而不影响几何尺度. (5认同)
  • @kojow7:通常,ImageMagick 将按照命令行中给出的相同顺序执行所有操作。因此,确实,您的怀疑/建议是正确的:如果您先按比例缩小,然后再减小文件大小,您可能会获得更好的质量结果。 (5认同)
  • 我认为这是相反的方式.您可能会得到一个比您要求的文件小但不大的文件 - http://www.imagemagick.org/script/command-line-options.php#define (2认同)
  • 可悲的是,这个选项也使小文件更大.有没有办法只影响大于300kb的文件? (2认同)

mir*_*los 13

jpegoptim工具(实际主页是多个程序)工作对我来说更好:

jpegoptim -s -S8 *.JPG
Run Code Online (Sandbox Code Playgroud)
  • -s 意味着剥离所有元数据(EXIF,JFIF,XMP等)
  • -S8 意味着定位大约8 KiB的文件大小

你可以通过运行两次来更好地处理它们,因为根据经验,大多数图像都是渐进的:

jpegoptim -s --all-progressive -S8 *.JPG; jpegoptim -s --all-normal -S8 *.JPG
Run Code Online (Sandbox Code Playgroud)

jpegoptim 通常会拒绝写出增加尺寸的图像,因此这样可以为您提供最佳的质量/尺寸.

至于图像尺寸部分:您通常首先根据尺寸定义目标尺寸并在那里进行缩放,然后才定义目标文件尺寸.这是因为,当您显示它时,理想情况下您希望图像尺寸是最终显示尺寸的整数倍或分数,以使缩放更容易,甚至不必要.因此,首先缩放到目标尺寸(质量为100,可能还有其他类似4:4:4色度,最常见的是dct float),然后缩小文件大小.如果无法达到所需的文件大小范围,请选择较小的目标尺寸并重新启动(从原始图像,而不是首先缩小的图像).

  • 与 `convert -define jpeg:extent=300kb ...` 相同的问题,它保持图像尺寸并降低质量。 (2认同)
  • @Nemo 问题是关于 JPEG 文件,而不是关于 JPEG2000 文件。首先将它们转换为 JPEG。(由于错误、安全漏洞以及缺乏实际的 JPEG2000 图像,JPEG2000 解码器目前正在从许多软件中删除。) (2认同)