Imagemagick - 仅对色彩空间为 CMYK 的文件使用 mogrify

Imagemagick - use mogrify only for files with colorspace CMYK

我只需要为 CMYK 色彩空间文件使用 jpg 转换脚本。问题是文件夹中有很多jpg文件(colospace sRGB和CMYK)。我想使用 mogrify 功能。我已经创建了一个通用脚本来更改文件夹中的所有文件。我需要创建一个过滤器以使脚本仅适用于带有 CMYK 文件的 JPG

cd "C:\Program Files\ImageMagick-7.0.11-Q16-HDRI\"
magick mogrify -profile c:\test\profile\USWebCoatedSWOP.icc -profile "c:\test\profile\sRGB Color Space Profile.icm" -quality 80 c:\test\*.jpg

正如 Fred (@fmw42) 所说,mogrify 不能像那样根据图像类型限制其处理。但是,它 可以 使用文件名列表。所以,如果 filelist.txt 看起来像这样:

image32.jpg
image43.jpg
...

您可以 mogrify 像这样调整这些文件的大小:

magick mogrify -resize 640x480 @filelist.txt

所以,现在的问题是如何生成 CMYK 文件列表。我无法在 Windows 上确切地告诉你如何做到这一点,但我可以告诉你如何开始,希望你能解决剩下的问题。

如果你运行这个命令,它会打印一行包含每个图像的色彩空间和文件名的文件:

magick identify -format "%[colorspace]:%f\r\n" *.jpg > filelist.txt

示例输出

CMYK:a.jpg
sRGB:b.jpg

其中:

  • %[colorspace] 是图像的色彩空间
  • :只是我随意选择的分隔符
  • %f是图片文件名
  • \r\n 是 Windows CR+LF 行结尾。

然后您只需要 select 以 CMYK 开头的行并丢弃第一个字段,您的工作就完成了。在 Linux/macOS 中,我会使用:

magick identify -format "%[colorspace]:%f\n" *.jpg | grep "^CMYK" | cut -d: -f2 > filelist.txt

你可以得到 grepcut for Windows,但可能还有其他(更原生的)方法 selecting Windows 中的行使用 FOR 循环,例如 this.

我能够得到我需要的效果。我找到了类似的脚本并根据需要进行了编辑。我不是程序员,所以对语法感到抱歉。也许对某人有用。

@echo off
for /F "delims=" %%I in ('dir /B /S *.jpg') do call :process "%%I"
goto :eof

:process
C:\Progra~1\ImageMagick-7.0.11-Q16-HDRI\magick identify -verbose %1 | find /c /i "Colorspace: CMYK" > c:\test\temp.txt
set /p count=<c:\test\temp.txt
del c:\test\temp.txt
if %count%==1 (
C:\Progra~1\ImageMagick-7.0.11-Q16-HDRI\magick.exe mogrify -profile c:\test\profile\USWebCoatedSWOP.icc -profile c:\test\profile\sRGBColorSpaceProfile.icm -quality 80 "%~dpn1.jpg"
)
goto :eof