为什么在 Illustrator 中打开某些 PNG 文件的颜色会失真?

平面设计 adobe-illustrator 颜色 PNG 颜色配置文件
2021-12-30 08:19:35

我试图在 Illustrator 中打开 iPhone 屏幕截图,但由于某种原因颜色失真。如果我在任何其他应用程序(Photoshop、GIMP、Preview 等)中打开相同的文件,颜色会呈现得很好。奇怪的是,这只发生在某些屏幕截图中,因为我也测试了主屏幕的屏幕截图,Illustrator 打开它时没有扭曲颜色。

但是,使用 GIMP,会弹出一个对话框,说明:

图像“IMG_1199.PNG”具有嵌入的颜色配置文件:

显示 P3

将图像转换为 RGB 工作空间(sRGB 内置)?

可选择保留或转换颜色配置文件;这让我觉得 Illustrator 可能无法识别上述颜色配置文件。

这是直接来自手机的原始图像 [左] 和从 Illustrator 打开(然后保存)的图像 [右]:

iPhone 键盘截图 iPhone 键盘截图失真


更新

在 GIMP 中转换颜色配置文件,保存,然后在 Illustrator 中再次打开文件确实可以解决问题。这似乎证实了我对 Display P3 颜色配置文件是问题的怀疑,这在一定程度上改变了我的问题:如何在不事先转换图像的情况下在 Illustrator 中打开图像?

这似乎是 Illustrator 中的一个错误,所以我已经向 Adob​​e 提交了一个错误报告。如果报告是结论性的,或者 Adob​​e 提供了解决方案,我会更新。

4个回答

可能发生的情况:屏幕截图是 16 位 png,但 illustrator 将其读取为 8 位 png,仅使用低 8 个 (!) 位。

解释

对于下面的解释我们假设截图是一个 16 位灰度图像,即每个像素都是一个介于

黑色= 0 = 0x0000 = 0b 0000 0000 0000 0000

(16 位)白色= 2^16-1 = 65535 = 0xFFFF = 0b 1111 1111 1111 1111。

(0x 表示十六进制数,0b 表示二进制数)

Illustrator 似乎只加载了这 16 位中的 8 位,不幸的是错误的位,即最不重要的位。选择最低有效位是唯一的问题。

0b #### #### #### ####
   \_______/ \_______/
   discarded   loaded

导入后,illustrator 会根据新的最大数量缩放解释(哪个数字是白色的,哪个是黑色的):

(8 位)白色= 2^8-1 = 255 = 0xFF = 0xb 1111 1111。

假设我们的一个像素的值是 0b 1111 1111 0000 00001 = 0xFF01 = 65281,这几乎是白色的。导入后,值将是 0b 0000 0001 = 0x01 = 1,即接近黑色。

这就像将 999.1“四舍五入”为 1——完全错误!

模拟

我们如何确定所描述的问题是我们的问题?我们模拟错误!

以下 python 程序如上所述加载 16 位屏幕截图。
(请不要评判我,这是我的第一个 python 程序。)

#! /usr/bin/python
import numpy as np
import cv2

# load picture
img = cv2.imread('screen.png', 3)

# assert (by hand) that picture is loaded as 16 bit image
print img.dtype

# simulate the bug
img[:,:] &= 0x00FF # use only 8 least significant bits
img[:,:] <<= 8     # rescale

# save the picture
cv2.imwrite('bug.png',img)

模拟错误
结果bug.png
点击此处查看原始尺寸,此处与 OP 版本进行比较。

正如我们所看到的,我们的模拟产生了完全相同的结果。

解决方法

我只能想到一种解决方法(因为我不使用插画师):

将您的屏幕截图转换为 8 位 png

GraphicsMagick 和/或 ImageMagick 是适合这项工作的控制台工具。以下命令转换为 8 位 png:

convert original.png -depth 8 converted.png

这已经晚了,但一个简单的解决方法(对于 Mac 用户)是在预览中打开 PNG,然后将其导出为 PNG,将默认的 16 位选项切换为 8 位选项。它不需要任何额外的软件,只需几秒钟。

现在这是一些时髦的问题。

GIMP 已经给了我们一些线索,证实了截图的颜色配置文件的怀疑。将其转换为您的日常 sRGB 和每通道 8 位可能会避免 Illustrator 在尝试将其拉为 CMYK 时搞砸。

将图像转换为 .pdf 帮助我在 Mac 上解决了这个问题