微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在复合操作中使ImageMagick尊重颜色配置文件?

如何解决如何在复合操作中使ImageMagick尊重颜色配置文件?

我有一个脚本,该脚本使用ImageMagick将两个图像合成在一起。它可以在ImageMagick v6上正常工作,但是可以在v7上输出损坏的图像(准确地说,是在macOS上ImageMagick 7.0.8-68 Q16 x86_64 2020-01-14)。

两个输入图像都使用CMYK颜色配置文件,它们都已嵌入,但我也有单独的文件。我希望输出文件使用相同的颜色配置文件。使用ImageMagick v7将图像合成在一起会导致图像破碎,其中颜色空间更改为RGB,而CMY通道映射到RGB,而K通道被丢弃(因此颜色看起来很明显是错误的!)。对这些文件执行其他操作(例如裁切),输出的结果将保留预期的颜色配置文件和CMYK颜色空间;据我所知,只是composite的行为已改变。

我最初使用以下命令:

convert -profile USWebCoatedSWOP.icc under.jpg -profile USWebCoatedSWOP.icc over.jpg -gravity center -composite -profile USWebCoatedSWOP.icc comp.jpg

这在v6下有效,但在v7下无效。由于图像中嵌入了颜色配置文件,因此我想知道是否正在进行某种颜色空间转换,因为我还在命令中提供了配置文件,因此我尝试了其他一些变体:

# No external profiles specified:
convert under.jpg over.jpg -gravity center -composite comp.jpg
# Embedded input profiles implicit,output profile specified:
convert under.jpg over.jpg -gravity center -composite -profile USWebCoatedSWOP.icc comp.jpg
# Output profile specified twice,as a from–to conversion:
convert under.jpg over.jpg -gravity center -composite -profile USWebCoatedSWOP.icc -profile USWebCoatedSWOP.icc comp.jpg

所有这些都会导致相同的输出。 (在v6下,它们还会导致一致的输出,除非在那种情况下,输出始终是正确的!)添加-colorspace CMYK没有任何效果,只是使残破的图像被轻微洗掉了。添加-set colorspace CMYK会导致图像损坏。

在v6和v7之间的复合操作中,ImageMagick处理颜色配置文件的方式似乎已经发生了一些变化,但是呢? changelogs中没有什么立即引人注意的。

identify -verbose中的相关部分。输入文件具有:

Image: under.jpg
  Format: JPEG (Joint Photographic Experts Group JFIF format)
  Mime type: image/jpeg
  Class: DirectClass
  Geometry: 1630x2220+0+0
  Resolution: 600x600
  Print size: 2.71667x3.7
  Units: Undefined
  Colorspace: CMYK
  Type: ColorSeparation
…
  Properties:
    date:create: 2020-08-29T13:13:02+00:00
    date:modify: 2020-08-29T12:39:46+00:00
    icc:copyright: copyright 2000 Adobe Systems,Inc.
    icc:description: U.S. Web Coated (SWOP) v2
    jpeg:colorspace: 4
    jpeg:sampling-factor: 1x1,1x1,1x1
    signature: d8e1a18efe471b7a131e661ea31e0b02aed6cb9e6555254781fc9df5352f2d6c
  Profiles:
    Profile-icc: 557168 bytes
…

v7中损坏的输出文件具有:

Image: comp.jpg
  Format: JPEG (Joint Photographic Experts Group JFIF format)
  Mime type: image/jpeg
  Class: DirectClass
  Geometry: 1630x2220+0+0
  Resolution: 600x600
  Print size: 2.71667x3.7
  Units: Undefined
  Colorspace: sRGB
  Type: TrueColor
…
  Properties:
    date:create: 2020-08-29T13:35:01+00:00
    date:modify: 2020-08-29T13:35:01+00:00
    icc:copyright: copyright 2000 Adobe Systems,Inc.
    icc:description: U.S. Web Coated (SWOP) v2
    jpeg:colorspace: 2
    jpeg:sampling-factor: 1x1,1x1
    signature: f1ef274bc6f6f631a406ea3e5c25691faa50ea99ff14ab56ed7b80431f2e64a4
  Profiles:
    Profile-icc: 557168 bytes
…

v6中正确的输出文件具有:

Image: comp.jpg
  Format: JPEG (Joint Photographic Experts Group JFIF format)
  Mime type: image/jpeg
  Class: DirectClass
  Geometry: 1630x2220+0+0
  Resolution: 600x600
  Print size: 2.71667x3.7
  Units: Undefined
  Colorspace: CMYK
  Type: ColorSeparation
…  Properties:
    date:create: 2020-08-29T13:25:44+00:00
    date:modify: 2020-08-29T13:24:12+00:00
    icc:copyright: copyright 2000 Adobe Systems,1x1
    signature: 457347556af05e75fd5cc65f8c1cd1c94dae1ac6fb574c103dc09d8744877928
  Profiles:
    Profile-icc: 557168 bytes
…

损坏的输出中RGB通道的通道统计信息与正确输出中的CMY通道的统计信息完全匹配。

编辑: 根据fmw42的评论,我还尝试了v7的更严格语法:

magick under.jpg -profile USWebCoatedSWOP.icc over.jpg -profile USWebCoatedSWOP.icc -gravity center -composite -profile USWebCoatedSWOP.icc comp.jpg

但是,这仍然会产生损坏的图像。这是嵌入了配置文件的测试图像(比我正在使用的真实图像小,但仍然存在相同的问题):

解决方法

这两个命令对于使用IM 6.9.11.28和IM 7.0.10.28 Q16 Mac OSX Sierra的ImageMagick来说对我来说很好用。两者均产生CMYK结果并包含cmyk配置文件。我怀疑您的IM 7版本过旧,并且存在一个已被纠正的错误。这些配置文件从输入端传送到输出端。

IM 6

convert under.jpg over.jpg -gravity center -compose over -composite result6.jpg

enter image description here

IM 7

magick under.jpg over.jpg -gravity center -compose over -composite result7.jpg

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。