事情的起因是实在受不了了老笔记本糟糕的低色域屏,决心逃离多年的灰色命运,然后斥资小百换了块上档次的P3色域屏幕。
刚装上的时候无比激动,感觉人生终于充满了色彩,但是使用了一段时间发现,其实屏幕的色域还真不是越高越好。最大的问题就在于颜色实在是过分鲜明了,系统UI和网页上的各种彩色文字按钮和图标都变得非常亮,反而不好阅读,俗称过饱和。虽然理论上来说P3色域完全涵盖了网页上的通用标准sRGB色域,可以做到用更小的sRGB色域显示内容,但问题是,这是必须得付出行动才能得到的结果,就是所谓的色彩管理。否则只有原生的sRGB屏幕才是正确的,无论是广色域还是低色域,颜色都是失真(低色域屏幕是完全无法治疗)。
要做颜色管理首先得有显示器特性的icc配置文件(在Windows和MacOS上扩展名为 .icm,而Linux上扩展名是 .icc)。icc配置文件(ICC Profile)用于描述色域,不仅是用来表示屏幕能显示的色彩,也用来表示标准色域,而且在打印机和摄像头等方面也有应用。这个文件可以用校色软件配合校色仪取得,如果方法正确得到的结果是比较准确的。还有一种方法,在显示器的EDID信息的扩展段中,有厂商预留的色彩数据。但是这个数据可能虚标,而且每块屏幕即使型号相同,由于制造公差和使用时间带来的老化,屏幕的色彩也会发生变化,所以这种数据就不如前者准确。但是这个数据至少是免费的,也能拿来做色彩管理。这个数据可以用命令 di-edid-decode /sys/class/drm/[显示器的接口号]/edid 读取。然后用DisplayCAL软件的Synthetic ICC把数据输入进去就能创建icc配置文件了。
.icm
.icc
di-edid-decode /sys/class/drm/[显示器的接口号]/edid
但是其实甚至都不需要那么麻烦,因为GNOME的色彩管理会在连接显示器的时候自动用EDID生成icc配置文件。可以这样添加:
添加好了之后是这样的:
在查看详情里面可以看到icc文件的位置,以及色域图表等信息。
那么色彩管理就大功告成了吗?不对,后面要折腾的东西还有很多,并且有些问题在当下尚无解决办法。
色彩管理可以分为两种,全屏幕的色彩管理和分应用的色彩管理。理想情况中,后者更好。让不同的应用以自己的方式转换色域,这样在同一块屏幕中,使用不同色彩标准的内容都可以正确显示,不会发生过饱和欠饱和等问题,完美呈现创作者的意图——可惜实际上不是这样的。目前在我的系统上的各种应用中,只有krita自动应用了系统的icc配置文件,对sRGB标准的图片展示出了正确的色彩。gimp手动加载icc后,结果也是正确的。firefox需要在 about:config页面中设置 gfx.color_management.display_profile指定icc文件,如果 gfx.color_management.mode值为2,就只对标注了色彩空间的图片生效;如果值为1,就把未标注的所有内容,包括文字按钮和其他图片等都视为sRGB,这种设置的视觉体验是更好的。但是,我发现视频并没有生效,目前并不知道如何解决。GNOME自带的图片查看器应该是支持色彩管理的,但是系统的icc不生效,也不知道从哪里加载icc,结果就是把显示器当成sRGB色域,所有图片都过饱和。由于各种应用程序对色彩管理的支持不一,不仅设置麻烦,而且很多地方到最后也没有解决过饱和的问题。
about:config
gfx.color_management.display_profile
gfx.color_management.mode
那么全屏幕的色彩管理呢?如果把屏幕直接限缩到sRGB,虽然应用无法显示广色域内容了,但是对于没有专业需求的用户来说,让大多数应用显示正确的色彩已经足够了。苹果的系列系统中、安卓、以及2022年之后的Windows11都或多或少有了类似的能力。
VCGT(Video Card Gamma Table/显卡伽马表)是Linux和过去的Windows只支持的一种全屏调色方法。VCGT并不存在于icc标准中(icc本来是用来描述色域的而非对屏幕校色),但是很多校色应用支持这个标签。本质上是一维的LUT(Look Up Table/查找表),对于三原色分别进行输入值和输出值的映射(很像图片编辑软件中的曲线工具),采用显卡自带的功能进行调色。在GNOME上加载带VCGT的icc就可以能自动全屏调色了。但是很明显,这种调色方法的功能有限,只能略微改善偏色,更没法做到色域限缩。这就是Linux在颜色管理方面不成熟的表现了,不过相关的工作正在逐步进行,未来也许能赶上先进水平。
通过一个色域的icc换算成另一个色域的icc本身是可行的,实际上krita、gimp这类的软件就是这么做的,使用的是流行的little cms色彩管理引擎(lcms2)。另一种方法是把色域的对应关系记录成LUT,当然一维LUT是完全不够用,必须使用三维的LUT。3D LUT是在影视制作流程中更常见的色域转换方式,也可以用在屏幕校色中。很多高档显示器支持硬件校色和色域模拟,其实就是在显示器硬件芯片中用的3D LUT。
随着苹果对Display P3的推广,越来越多的广色域设备已经出现在市场上。如果大家想体验到广色域的魅力,又不希望折腾色彩管理,可以选择自带色域模拟功能的显示器,在显示器菜单里即可切换各种色域,现在这种功能已经不算高档设备的专属了。如果选择笔记本的屏幕,因为在Linux里不能调,建议还是选择sRGB标准的(别看sRGB算是各种色域标准中比较小的,其实不少老设备都做不到100%覆盖)。如果已经上了广色域的船,或者有打印等专业需求的,了解一些颜色管理就是至关重要了。
等wayland成熟,x11在这方面是没救了。
Featured Collection
Popular Ranking
Popular Events
事情的起因是实在受不了了老笔记本糟糕的低色域屏,决心逃离多年的灰色命运,然后斥资小百换了块上档次的P3色域屏幕。
刚装上的时候无比激动,感觉人生终于充满了色彩,但是使用了一段时间发现,其实屏幕的色域还真不是越高越好。最大的问题就在于颜色实在是过分鲜明了,系统UI和网页上的各种彩色文字按钮和图标都变得非常亮,反而不好阅读,俗称过饱和。虽然理论上来说P3色域完全涵盖了网页上的通用标准sRGB色域,可以做到用更小的sRGB色域显示内容,但问题是,这是必须得付出行动才能得到的结果,就是所谓的色彩管理。否则只有原生的sRGB屏幕才是正确的,无论是广色域还是低色域,颜色都是失真(低色域屏幕是完全无法治疗)。
要做颜色管理首先得有显示器特性的icc配置文件(在Windows和MacOS上扩展名为
.icm,而Linux上扩展名是.icc)。icc配置文件(ICC Profile)用于描述色域,不仅是用来表示屏幕能显示的色彩,也用来表示标准色域,而且在打印机和摄像头等方面也有应用。这个文件可以用校色软件配合校色仪取得,如果方法正确得到的结果是比较准确的。还有一种方法,在显示器的EDID信息的扩展段中,有厂商预留的色彩数据。但是这个数据可能虚标,而且每块屏幕即使型号相同,由于制造公差和使用时间带来的老化,屏幕的色彩也会发生变化,所以这种数据就不如前者准确。但是这个数据至少是免费的,也能拿来做色彩管理。这个数据可以用命令di-edid-decode /sys/class/drm/[显示器的接口号]/edid读取。然后用DisplayCAL软件的Synthetic ICC把数据输入进去就能创建icc配置文件了。但是其实甚至都不需要那么麻烦,因为GNOME的色彩管理会在连接显示器的时候自动用EDID生成icc配置文件。可以这样添加:

添加好了之后是这样的:

在查看详情里面可以看到icc文件的位置,以及色域图表等信息。

那么色彩管理就大功告成了吗?不对,后面要折腾的东西还有很多,并且有些问题在当下尚无解决办法。
色彩管理可以分为两种,全屏幕的色彩管理和分应用的色彩管理。理想情况中,后者更好。让不同的应用以自己的方式转换色域,这样在同一块屏幕中,使用不同色彩标准的内容都可以正确显示,不会发生过饱和欠饱和等问题,完美呈现创作者的意图——可惜实际上不是这样的。目前在我的系统上的各种应用中,只有krita自动应用了系统的icc配置文件,对sRGB标准的图片展示出了正确的色彩。gimp手动加载icc后,结果也是正确的。firefox需要在
about:config页面中设置gfx.color_management.display_profile指定icc文件,如果gfx.color_management.mode值为2,就只对标注了色彩空间的图片生效;如果值为1,就把未标注的所有内容,包括文字按钮和其他图片等都视为sRGB,这种设置的视觉体验是更好的。但是,我发现视频并没有生效,目前并不知道如何解决。GNOME自带的图片查看器应该是支持色彩管理的,但是系统的icc不生效,也不知道从哪里加载icc,结果就是把显示器当成sRGB色域,所有图片都过饱和。由于各种应用程序对色彩管理的支持不一,不仅设置麻烦,而且很多地方到最后也没有解决过饱和的问题。那么全屏幕的色彩管理呢?如果把屏幕直接限缩到sRGB,虽然应用无法显示广色域内容了,但是对于没有专业需求的用户来说,让大多数应用显示正确的色彩已经足够了。苹果的系列系统中、安卓、以及2022年之后的Windows11都或多或少有了类似的能力。
VCGT(Video Card Gamma Table/显卡伽马表)是Linux和过去的Windows只支持的一种全屏调色方法。VCGT并不存在于icc标准中(icc本来是用来描述色域的而非对屏幕校色),但是很多校色应用支持这个标签。本质上是一维的LUT(Look Up Table/查找表),对于三原色分别进行输入值和输出值的映射(很像图片编辑软件中的曲线工具),采用显卡自带的功能进行调色。在GNOME上加载带VCGT的icc就可以能自动全屏调色了。但是很明显,这种调色方法的功能有限,只能略微改善偏色,更没法做到色域限缩。这就是Linux在颜色管理方面不成熟的表现了,不过相关的工作正在逐步进行,未来也许能赶上先进水平。
通过一个色域的icc换算成另一个色域的icc本身是可行的,实际上krita、gimp这类的软件就是这么做的,使用的是流行的little cms色彩管理引擎(lcms2)。另一种方法是把色域的对应关系记录成LUT,当然一维LUT是完全不够用,必须使用三维的LUT。3D LUT是在影视制作流程中更常见的色域转换方式,也可以用在屏幕校色中。很多高档显示器支持硬件校色和色域模拟,其实就是在显示器硬件芯片中用的3D LUT。
随着苹果对Display P3的推广,越来越多的广色域设备已经出现在市场上。如果大家想体验到广色域的魅力,又不希望折腾色彩管理,可以选择自带色域模拟功能的显示器,在显示器菜单里即可切换各种色域,现在这种功能已经不算高档设备的专属了。如果选择笔记本的屏幕,因为在Linux里不能调,建议还是选择sRGB标准的(别看sRGB算是各种色域标准中比较小的,其实不少老设备都做不到100%覆盖)。如果已经上了广色域的船,或者有打印等专业需求的,了解一些颜色管理就是至关重要了。