ImageMagick 在多个条件下压缩和调整图像大小

ImageMagick compress and resize image with multiple conditions

我正在尝试制作一个批处理文件来压缩和调整一些图像的大小。它们是 JPG 和 PNG。文件大小不一,但我只想修改大文件。

如果可能的话,我希望对我正在探索的每个选项都有一个答案。

选项 1:简单

正如上面的描述一样,我使用了一些基本命令来实现这一点。

@echo off
for %%f IN (*.jpg *.png) DO magick mogrify -quality 70 -resize 960x540^\> "%%f" "%%f"

我认为问题出在 ^\>。我只希望它调整较大文件的大小并适合最小尺寸。但是,我找不到同时满足这两个条件的方法。另外,我不能只 > 工作(所以我不确定我是否偏离了轨道)。

选项 2:复杂

This guy completed a fairly decent analysis on the best method for resizing (and compressing) images. 这促使我将它加入到我的代码中以创建...

@echo off
for %%f IN (*.jpg *.png) DO magick mogrify -filter Triangle -define filter:support=2 
-thumbnail 500 -unsharp 0.25x0.08+8.3+0.045 -dither None -posterize 136 -quality 82 
-define jpeg:fancy-upsampling=off -define png:compression-filter=5 
-define png:compression-level=9 -define png:compression-strategy=1 
-define png:exclude-chunk=all -interlace none -colorspace sRGB "%%f" "%%f"

[为了更好的观看而手动中断。]

我唯一无法在这里工作的条件是只能更改大于 500 像素的文件 (>)。这可能与我在上面遇到的问题相同。

我希望这是一个简单的解决方案。我确实尝试查看文档,但没有发现任何特别有用的东西(不超过 code informing me of conditions)。

感谢您的帮助。

在 DOS 中 Windows 在 Imagemagick 中,请参阅 https://legacy.imagemagick.org/Usage/windows/#conversion 中的内容:

All reserved shell characters which are not in double quotes must be escaped with a '^' (caret or circumflex) if used in a literal sense (i.e. not fulfilling their usual purpose). These reserved shell characters are: '&', '|', '(', ')', '<', '>', '^'.

This especially means that: The special character '>' (used for resize geometry) needs to be escaped using '^'. For example -resize 100x100^>.

Similarly the 'internal fit resize' flag '^' needs to be doubled to become '^^'.

所以你可以使用双引号(并且没有转义)作为:

-resize "960x540^>"

或者您可以将 ^ 和 >(并且没有引号)转义为:

-resize 960x540^^^>