使用ImageMagick批量调整图像大小并将图像输出到新文件夹

105

当前图片文件夹路径:

public_html/images/thumbs

输出图像文件夹路径:

public_html/images/new-thumbs

当前文件夹中每个视频有10个视频缩略图,缩略图的名称如下:

1-1.jpg
1-2.jpg
1-3.jpg
1-4.jpg
1-5.jpg (Resize)
1-6.jpg
1-7.jpg
1-8.jpg
1-9.jpg
1-10.jpg

2-1.jpg
2-2.jpg
2-3.jpg
2-4.jpg
2-5.jpg (Resize)
2-6.jpg
2-7.jpg
2-8.jpg
2-9.jpg
2-10.jpg

我想把所有第五张图片(*-5.jpg)调整大小并移动到新文件夹中。我尝试了以下命令但不成功:

mogrify 
-path 
  public_html/images/thumbs/*-5.jpg 
-resize 16×12 
-quality 100 
  public_html/images/new-thumbs/*-5.jpg
5个回答

146

在调用"Mogrify"时,应该从包含原始缩略图的目录中调用,而 -path 参数用于指向目标目录。

mkdir public_html/images/new-thumbs
cd public_html/images/thumbs
magick mogrify -resize 16x12 -quality 100 -path ../new-thumbs *.jpg

http://www.imagemagick.org/Usage/basics/#mogrify

最后的参数是文件列表,因此您可以通过名称筛选,例如1-*.jpg


17
您说得没错,但是您也可以从任何目录调用 mogrify 命令,例如我使用命令 mogrify -path /destination/path/ -adaptive-resize 5000 -unsharp 0x1 -format png /originary/path/*.jpeg 将原始的 JPEG 图片转换成 PNG 格式。 - Tenaciousd93
17
请注意,您指向的输出目录必须存在,因为ImageMagick不会创建它们,否则会导致“mogrify: unable to open image”错误。 - Matthew Morek
2
太好了,我指定了“path”,但它仍然删除了原始文件。我的命令行有问题吗?这是Windows系统,因此使用反斜杠:mogrify -resize 2752 *.tif -path E:\1\ - Violet Giraffe
2
@VioletGiraffe,选项的顺序很重要,应该是这样的:mogrify -resize 2752 -path E:\1\ *.tif(注意*.tif在最后)。 你尝试的方式就像传递一个图像设置或操作,但对mogrify来说不适用,据我所知。 - Dmytro Vyprichenko
1
我明白了,非常感谢您的回答和评论! - Violet Giraffe
显示剩余2条评论

20

推荐的解决方案在最新的ImageMagick(至少在macOS上)无法正常工作。

以下是适用于覆盖源图像的命令:

magick mogrify -path ./ -resize 50% -quality 80 *.jpg

如果想避免覆盖原始图像,请写入一个新的文件夹:

magick mogrify -path path/to/destination/folder/ -resize 50% -quality 80 *.jpg


如果你将大小缩小50%,然后将质量降低20%,那么它只会是原始质量的40%吗?即0.5 * 0.8。 - Paolo Tormon
1
@PaoloTormon:不是的。-resize 改变像素大小,-quality 改变文件压缩率。对于 PNG 格式,-quality 改变文件大小和解压时间之间的比例,但该格式是无损的,因此您不会看到使用不同“质量”压缩的文件之间有任何区别。对于 JPEG 格式,您会看到差异,但它比简单地将两个参数相乘更为复杂。 - Xr.

10

在 ImageMagick 7 版本中,它已经内置到了“magick”中,因此...

magick mogrify -resize 16x12 -quality 100 -path ../new-thumbs *.jpg

请确保您在 path 中指定的文件夹存在。ImageMagick 不会自动创建该文件夹。

在此处查找更多信息:https://www.imagemagick.org/script/mogrify.php


1
这与被接受的答案完全相同,只是晚了4年。为什么?(我猜你在前面加了“magick”这个词,但没有添加该单词也可以正常运行(没有附加值))。 - ashleedawg
3
@ashleedawg,如果没有 magick,我在Windows上使用ImageMagick 7时会在输出中得到 Cannot find file at '..\\lib\imagemagick.tool\tools\mogrify.exe'。有关详细信息,请参见此答案。我给mahesh madhusudan点赞。谢谢。 - Саша Черных
1
非常感谢@СашаЧерных....!!! 我一直在努力回想我为什么要这样做...因为那是很久以前的事情了... - virtuvious
@СашаЧерных 这不需要单独回答,最多只需要一条评论。 - Shidouuu

2

对于在Ubuntu/Debian上安装了Shotwell的用户,以下操作可以更轻松地将选定文件夹中的图像导出到另一个文件夹,并根据需要进行处理。

  • 打开Shotwell
  • 选择要导出的图像
  • 文件 > 导出
  • 根据需要调整值
  • 选择导出的文件夹

0
在我的情况下,我使用的是7.1.1版本。
F:\Dataset\images>c:\"Program Files"\ImageMagick\mogrify -quality 50 -path ..\lowquality\ *

这段代码应该从原始图像文件夹中执行,并指定一个新的文件夹位置进行保存。

而且不要忘记在"Program Files"中添加"",否则会返回此错误。

c:\Program: 无法将't:\Program'识别为cmdlet、函数、脚本文件或可执行程序的名称。请检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。


请点击以下链接查看内容:https://legacy.imagemagick.org/Usage/resize/ - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接