如何解决如何在复合操作中使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
…
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
…
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
但是,这仍然会产生损坏的图像。这是嵌入了配置文件的测试图像(比我正在使用的真实图像小,但仍然存在相同的问题):
- under.jpg-输入文件
- over.jpg-输入文件
- compv6.jpg-v6产生的期望输出
- compv7.jpg-v7产生的输出不正确
解决方法
这两个命令对于使用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
IM 7
magick under.jpg over.jpg -gravity center -compose over -composite result7.jpg
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。