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


11

我试图在Illustrator中打开iPhone屏幕快照,但由于某些原因颜色失真。如果我在其他任何应用程序(Photoshop,GIMP,Preview等)中打开相同的文件,则颜色呈现良好。奇怪的是,这仅在某些屏幕截图中发生,因为我也测试了主屏幕的屏幕截图,Illustrator在不扭曲颜色的情况下打开了该屏幕。

但是,对于GIMP,确实会弹出一个对话框,指出:

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

显示P3

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

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

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

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


更新资料

在GIMP中转换颜色配置文件,进行保存,然后在Illustrator中再次打开文件确实可以解决该问题。这似乎证实了我对Display P3颜色配置文件的怀疑,这使我的问题有所改变:我如何在Illustrator中打开图像而无需先转换图像?

看来这可能是Illustrator中的一个错误,所以我已经向Adobe提交了一个错误报告。如果报告是结论性的,或者Adobe提供了解决方案,我将进行更新。


1
迷幻!我认识吃药的人才能看到这一点。嘿布莱恩,欢迎来到GDSE,谢谢您的提问。如果您对此SE有任何疑问,请访问帮助中心,或者随时加入我们的Graphic Design Chat!继续做出贡献,并在这里享受您的时间。
文森特

iPhone屏幕快照有很多问题,但是我从来没有这样的问题。令人印象深刻。

P3颜色配置文件是否暗示10bpp颜色(也称为30位)?这是错误还是AI不能处理10bpp(ARGB 02 10 10 10)?询问思想想知道。(编辑:要清楚,我真的很想知道,因为我没有任何线索)
Yorik

奇怪:GraphicsMagick identify和Linux都file将左侧发布的屏幕快照识别为jpg,尽管其后缀为.png。这是原始/未修改的屏幕截图吗?您是否将后缀重命名为.png?也许这就是问题所在。尝试将后缀更改为jpg,然后再次打开。
索科威

@Socowi Huh,这很奇怪,我自己使用filemacOS上的命令对其进行了测试。它出现的JPEG image data为好,即使信息窗口仍然显示其为PNG文件。这一定是Imgur进行缩放照片的工作。如果从完整大小的链接下载图像,则该file命令应将其正确识别为PNG文件。
布赖恩

Answers:


9

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

说明

对于以下说明,我们假定屏幕截图是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的版本进行比较。

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

解决方法

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

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

GraphicsMagick和/或ImageMagick是便于完成此工作的控制台工具。以下命令将转换为8位png:

convert original.png -depth 8 converted.png

哇,谢谢您的深入解释。Adobe尚未对我的错误报告做出回应,但是希望他们能为Illustrator添加适当的16位颜色支持。或者至少将它们正确四舍五入为8位颜色。
布赖恩

1

现在,这是一个时髦的问题。

GIMP已经为我们提供了一些线索,证实了怀疑它与屏幕截图的颜色配置有关。将其转换为您的日常sRGB和每个通道8bit可能会避免Illustrator将尝试将其作为CMYK弄乱的事情。


1

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.