mac photoshop displayp3在windows上显示偏差

引言

上文ps导出png设置探究 和 qq查看png颜色不一致 问题后,又研究了displayp3颜色空间(苹果专属)的一些特性,对颜色空间又有了新的认识。

起因

在mac上用ps的display-p3颜色空间制作了三张绿色(rgb设置0,255,0)图(图片放在末尾github链接里,以greenp3开头的三张),分别是①不勾选转成sRGB不嵌入颜色空间②勾选转成sRGB不嵌入颜色空间③不勾选转成sRGB且嵌入颜色空间。用mac的qq截图发现(与前一篇文章用win的qq截图不写入iCCP块的不同点在于,mac的qq截图会在iCCP写入ICC Profile信息),①和②没有嵌入颜色空间,mac qq上显示的都是p3空间的117, 251, 76浅绿色值(用mac自带的测色计测,默认显示p3空间 的值),只有③才是p3的255绿色。(windows下由于图片直接复制粘贴到csdn里会显示里面的绿色都是sRGB的255绿,所以我又在windows下截图了一遍,下面看到的图如果你用windows看的话,就是我实际上在mac看到的结果,如果用mac看我无法保证效果,可以自己尝试一下 请把mac自带的测色计改为以sRGB显示,因为浏览器的颜色空间是sRGB)

mac上看到的效果(特意为win做了处理,确保windows上能看到mac所示)
从上一篇文章我们可以推测(实际用libpng读也确实如此),①图存储的是255值 + 无iCCP,②图是255值对应的sRGB值 + 无iCCP,但是因为p3色域比sRGB广,所以没有对应的颜色,因此实际存储的就是上限0,255,0,③图是255 + iCCP写入了display-p3的颜色空间。
以二进制查看数据,①和②完全一值,均为下图所示
超出sRGB色域能表示的值会被截断
③嵌入了颜色空间,显示iCCP为Display,均符合推测
在这里插入图片描述

那么117, 251, 76又是怎么来的呢,我们找个网站转换一下(或者mac自带的测色计看),发现p3空间的117, 251, 76正好对应sRGB空间的0,255,0绿色。由此我们也可以得出结论,①②没有嵌入颜色空间,所以在mac qqnt的聊天框(mac的预览和照片也是)里被当作了sRGB空间处理,显示了117, 251, 76色值。只有③有颜色空间才被正确的显示了display-p3的正统绿色。所以如果想要保持预览结果正确的话,建议在导出的时候嵌入颜色空间,避免没有颜色空间而且ps也不按规范写入gAMA块的情况下,各家图片解析器就各显神通了。(在我的红米k70上无论在哪里,怎么看这几张原图都是255的绿色,所以也和设备类型/屏幕类型有关)。
p3转sRGB

其他

1.windows上看这三张原图都是0,255,0绿色,即使放大后也一样,说明即使解析到了iCCP(上一篇文章的结论表明能用照片查看图片支持解析iCCP)是displayp3,也因为显示屏无法支持而显示了上限0,255,0绿色。

2.在windows上看mac qq发的截图能看出差别(和mac放在qq聊天框里的效果一样),但是复制粘贴到qq聊天框里就看不出区别了(和mac的情况正好完全相反)。如果用windows的文件管理器图标查看和照片打开查看也全是255绿。下图是windows的qq看文章最开始的截图(和之前一样,直接发出来会显示6个sRGB255绿色,所以我又在windows下截图了一遍,确保windows下能看到差异)。
在这里插入图片描述
用测色计(我用的utools)发现,和mac一样(除了mac显示的是display-p3色值而windows是sRGB色值以外),左边两张是117, 251, 76,右边一张是0,255,0。打开vscode查看二进制发现mac的截图会在iCCP写入ICC Profile的值。
在这里插入图片描述
也就是说ICC Profile这个值在windows照片/预览、windows qq聊天输入框都会把117, 251, 76色值解析成0,255,0;但是windows qq聊天窗、mac qq聊天窗、聊天框均把117, 251, 76色值解析成117, 251, 76色值(windows是sRGB,mac是display-p3)。到此我也蒙圈了(更别说我的手机的qq上都是绿色而且不同的手机表现还不太一样了),希望有人了解ICC Profile是什么或者了解mac下的qq截图原理的话能回答一下吧。

3.为什么上一篇文章提到win的qq聊天窗和mac/win自带的预览/图片查看器如果解析不到iCCP颜色空间信息和gAMA块(gAMA块这个有待验证)就会当作sRGB空间解析。
这里我在windows下用ps的apple rgb色彩空间制作了0,188,0色值的图片,可以看到对应sRGB空间下的0, 196, 35。
在这里插入图片描述
在这里插入图片描述
将这张图片以不转出sRGB(表示存储的像素值就是ps信息面板上看到的0,188,0)不嵌入颜色空间(不写入iCCP块)导出,可以看到windows的图标预览和照片打开预览都是0,188,0(如果导出颜色空间则显示0, 196, 35,证明能解析iCCP块的adobe rgb)。说明确实将这张图片当作sRGB直接显示了。

4.如果要追求表现效果的话,导出时嵌入颜色空间是一定要勾选的。虽然说市面上大部分都是sRGB的显示器显示不出来效果,但是不勾选的话,如果这张图片是在比sRGB色域更广的色彩空间下制作的话,那由于导出没有任何信息表明这一点,那么显示的效果肯定就和设计制作的时候大相径庭了

GITHUB链接

https://github.com/Wxwind/png-test

  • 28
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
把下面的C代码转换成汇编代码,保留其注释到对应的位置:#include <REGX52.H> void Delay(unsigned int x)//延时函数,延迟x毫秒 { unsigned char i, j; while(x--) { i = 11; j = 190; do { while (--j); } while (--i); } } void displayO()//显示字母O { P2_4=1;P2_3=1;P2_2=1;//第一位位选信号:111 //单片机输出3位位选信号,经38译码器译码后接到共阴数码管阴极 // 111译码后为1111 1110,8脚低电平,此时LED8点亮,即左数第一个LED点亮 P0=0x3F; //字母O段选信号:0x3F //单片机输出8位段选信号,对应数码管a b c d e f g dp八段 //显示字母O,需要亮起a b c d e f 六段,灭掉g dp两段 //此时对应段选信号0 0 1 1 1 1 1 1,转换成16进制即为0x3F Delay(1); //延迟1ms快速刷新,达到视觉上连续显示的效果 P0=0x00; //防止下一个位选信号到来时,被上一个段选信号影响 //提前将段选信号置0,消除影响 } void displayP()//显示字母P { P2_4=1;P2_3=1;P2_2=0;//同理,第二位位选信号:110 P0=0x73; //同理,字母P段选信号:0x73 Delay(1); P0=0x00; } void displayE()//显示字母E { P2_4=1;P2_3=0;P2_2=1;//同理,第三位位选信号:101 P0=0x79; //同理,字母E段选信号:0x79 Delay(1); P0=0x00; } void displayL()//显示字母L { P2_4=1;P2_3=0;P2_2=0;//同理,第一位位选信号:100 P0=0x38; //同理,字母O段选信号:0x38 Delay(1); P0=0x00; } void main() { while(1) { displayO(); //在左数第一位显示字母O displayP(); //在左数第二位显示字母P displayE(); //在左数第三位显示字母E displayL(); //在左数第四位显示字母L } }
06-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值