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^^^>
我正在尝试制作一个批处理文件来压缩和调整一些图像的大小。它们是 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^^^>