【问题标题】:Image Magick Not Processing All ImagesImage Magick 不处理所有图像
【发布时间】:2019-04-09 07:51:04
【问题描述】:

我目前正在尝试使用以下方法将一批图像转换为灰度:

convert "*.jpg" -set colorspace Gray -separate -average "*.jpg"

现在我正在处理几百张图片。当我运行命令时,我得到了所有图像的副本,但实际上只有第一个被转换为灰度。任何人都知道问题可能是什么?此外,如果有人有更好的方法一次处理大量图像(最终我需要转换数千张),我将不胜感激。

谢谢!

【问题讨论】:

  • 我相信您需要遍历图像,然后一次做一个。您需要指出您正在使用的 shell,因为这会影响编写循环的正确语法。
  • 在 ImageMagick 中,输出不能使用通配符 (*)。输入允许使用通配符。因此,您要么必须对列表或目录中的每个文件使用 for 循环,要么使用 mogrify 而不是转换。 Mogrify 会自动循环遍历目录中的每个文件。见imagemagick.org/Usage/basics/#mogrify

标签: image image-processing imagemagick grayscale


【解决方案1】:

正如 cmets 中所指出的,您不能使用通配符作为输出。如果您想用更新后的色彩空间覆盖原始文件,可以尝试mogrify 实用程序。

mogrify -set colorspace Gray -separate -average *.jpg

但这可能会有风险,因为您会破坏原件。一个简单的 for 循环可能很容易安排和管理。

for filename in $(ls *.jpg)
do
    convert "$filename" -set colorspace Gray -separate -average "output_${filename}"
done

最终我需要转换几千个

如果您确实面临大量任务,我建议您将任务分散到多个 CPU 内核上。也许使用 GNU Parallel。

parallel convert {} -set colorspace Gray -separate -average output_{.} ::: *.jpg

当然,我假设您在 *nix 系统上使用 BASH。 YMMV 其他地方。

【讨论】:

  • 使用 mogrify,您可以提前创建一个新目录,然后在 mogrify 命令中,使用 -path 将输出图像指向新目录。这样您就不会冒险覆盖输入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-19
  • 1970-01-01
  • 2018-08-20
  • 1970-01-01
  • 2013-04-12
  • 2011-03-08
相关资源
最近更新 更多