Imagemagik-仅对具有颜色空间CMYK的文件使用mogrify



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

cd "C:Program FilesImageMagick-7.0.11-Q16-HDRI"
magick mogrify -profile c:testprofileUSWebCoatedSWOP.icc -profile "c:testprofilesRGB 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]:%frn" *.jpg > filelist.txt

样本输出

CMYK:a.jpg
sRGB:b.jpg

其中:

  • %[colorspace]是图像的颜色空间
  • :只是我随机选择的一个分隔符
  • %f是图像文件名
  • rn是Windows CR+LF行结尾

然后,您只需要选择从CMYK开始的行,并放弃第一个字段,您的工作就完成了。在Linux/macOS中,我会使用:

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

您可以为Windows获取grepcut,但在Windows中使用类似的FOR循环可能还有其他(更原生的(方式来选择行。

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

@echo off
for /F "delims=" %%I in ('dir /B /S *.jpg') do call :process "%%I"
goto :eof
:process
C:Progra~1ImageMagick-7.0.11-Q16-HDRImagick identify -verbose %1 | find /c /i "Colorspace: CMYK" > c:testtemp.txt
set /p count=<c:testtemp.txt
del c:testtemp.txt
if %count%==1 (
C:Progra~1ImageMagick-7.0.11-Q16-HDRImagick.exe mogrify -profile c:testprofileUSWebCoatedSWOP.icc -profile c:testprofilesRGBColorSpaceProfile.icm -quality 80 "%~dpn1.jpg"
)
goto :eof

最新更新