Xcode 9将P3 PDF资源转换为SRGB。

10

我花了几个小时试图弄清楚这个问题。

目标

UIImageView 中显示 P3 PDF 资产(PDF 100% 在 P3 颜色空间中)。

问题

我正在创建一个 P3 PDF 资产并将其添加到 Xcode 中。在 Asset Catalog 中,资源以正确的 P3 颜色出现。但是,在 iPhone X 上使用资源(支持 P3 颜色空间的物理设备)时,在 UIImageView 中显示的资源是 SRGB,而不是 P3。


是否有人知道如何解决这个问题?
任何帮助将不胜感激。
Roi


你应该提供更多信息,例如你是如何创建PDF资产并添加到Xcode的。 - Giacomo Catenazzi
@GiacomoCatenazzi 我使用 Sketch 创建了图片,并通过资源目录添加了它。 - Roi Mulia
请问您使用的是“未管理”颜色还是P3配置文件?以下是相关编程文档链接:https://sketchapp.com/docs/other/color-management/ - Giacomo Catenazzi
@GiacomoCatenazzi P3档案,我之前也写过了,我已经与多个检查员进行了核对。 - Roi Mulia
@GiacomoCatenazzi 你有解决方案的方向吗? - Roi Mulia
不,我不是MacOS的专家。您如何确定iPhone上的图像是以RGB方式呈现的?(超饱和?)问题在于某个地方(但您没有描述得很清楚)缺少颜色配置文件(例如CGImage上的CGColourSpace)。注意:PDF上的图像可能具有其他配置文件。可能有一个应用程序的通用设置,关于颜色管理(您所做的不是标准[因此不是期望的默认值],例如考虑只知道UI的sRGB的旧版应用程序)。 - Giacomo Catenazzi
2个回答

3

直接使用PNG格式

您提到怀疑PDF文件中包含PNG图像。我建议您直接使用PNG格式而不是将其包装在PDF中。

当PDF文件在设备上部署时,它们会被转换为PNG格式。这种渲染可能会应用特定的颜色配置文件(PDF和颜色管理是一个广泛的话题)。

此外,渲染本身可能无法产生您期望的结果,例如请参见:https://bjango.com/articles/idontusepdfs/

每个通道16位

苹果公司的人机界面指南规定,必须使用每个通道16位的 Display P3 颜色配置文件,并以 .png 格式导出图像。

如果适当,使用每个通道16位的 Display P3 颜色配置文件,并以 .png 格式导出图像。

详见: https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/color/#color-management

最后,我想再提及两个您可能已经在使用的设置:

压缩

在图像资源的属性检查器中,应选择“无损压缩”。

色域

将色域切换为“sRGB和Display P3”,然后确保图像位于 .xcasset 文件中的 Display P3 位置。

使用 Sketch 导出 PNG 进行测试

通过观察色度图,可以看出P3颜色空间在绿色方面具有更大的色域。

由于我不确定能否识别两个颜色空间之间的差异,因此我进行了以下实验:

  • 在 Sketch 中插入一个画板
  • 创建颜色为 #00FF00 的绿色矩形
  • 在 <文件/更改颜色配置文件> 下分配 Display P3 颜色配置文件
  • 选择矩形并单击 导出所选内容
  • 选择 .png 格式且不要交错

然后我用 sRGB ICE61966-2.1 配置文件重复了同样的过程。

我在 ColorSync 实用程序中检查了这两个 .png 文件。按下图像信息工具栏按钮,可以看到正确的 ColorSync 配置文件已被分配。

在 Affinity Photo 中,我在 <文档/颜色格式> 下检查了每个通道的位数。对于两个 .png 文件,它们的每个通道均为8位,因此我创建了两个额外的 .png 文件,并将其命名为16位。

然后,我将这4个 .png 文件添加到一个 .xcassets 文件夹中,并使用以下设置:

  • 压缩:'无损'
  • 比例:'单一比例'
  • 色域:'sRGB和Display P3'
  • 将.png文件分配到正确的插槽(sRGP或Display P3)中。

然后我部署到iPhone X。

结果:实际上,我可以看到绿色矩形之间的差异。 'Display P3'确实有更饱和的绿色。

我将同样的内容导出到旧版iPhone上,在那里我找不到sRGB和Display P3图像之间的任何区别。

我发现直接从Sketch获得的8位变体也可以工作,因此每个通道16位似乎不是硬要求。


更新了答案,包括 Sketch 的 PNG 导出测试。这符合您的需求吗? - Stephan Schlecht
嗨,斯蒂芬!你深入检查它真是太棒了。所以基本上Sketch中嵌入的8位属性基本上对我们有用。所以我想知道PDF的问题是苹果的问题还是Sketch的问题……无论如何,至少我们有一种安全的方式来显示正确的颜色空间中的资产(这有时在产品方面非常关键)。再次感谢您!我仍然会尝试理解是否可能将PDF转换为使xCode正确呈现它的颜色空间(从而消除1x、2x、3x资产的需求)等。 - Roi Mulia
让我们试试。快速问题:如果我在Sketch中选择矩形并单击窗口右下角的“导出所选...”,我只能选择导出.png文件。如何导出PDF文件? - Stephan Schlecht
您没有下拉菜单可供选择切换类型吗? - Roi Mulia
嘿,伙计!我有很多关于这个问题的见解想要和你分享。尽管我发现了一个问题,无论我尝试什么都无法解决。我试图创建一个P3应用程序图标(1024x1024)。从早上开始,我试图创建一个“愚蠢简单”的图标,基本上显示了P3颜色和常规颜色:https://webkit.org/blog-files/color-gamut/ 用Photoshop CC完全重新创建了P3示例,使用16位深度PNG和P3颜色空间,但在iPhone X上(180x180图标,物理设备)并没有正确显示它。无法理解为什么,因为我按照苹果的指示一步一步操作。 - Roi Mulia
显示剩余9条评论

1
你是否为你的资产选择了色域设置?

info

你是如何验证iPhone X上的图像是否在SRGB模式下?
也许需要再次检查WWDC16的演讲: 演讲幻灯片


嗨,这里有一个关于sRGB和P3颜色的差异。即使我选择了sRGB和P3,并将P3资源放置在P3框中,仍然显示相同的(sRGB)颜色。我唯一怀疑的是Sketch将其导出为32位PNG格式,而我认为xCode需要16位。但这仍然很奇怪。 - Roi Mulia
@RoiMulia 你是如何验证iPhone X上的图像是否为SRGB格式的? - zero3nna
我在电脑上直观地看到了P3和iPhone X上的sRGB之间的差异。当我使用UIColor3PDisplay渲染颜色时,我看到了正确的颜色,但是在我的Macbook Pro(2017触控栏,支持P3)和iPhone X上的同一张图片之间存在实际的差异。 - Roi Mulia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接