iPhone又出bug了,這次是衝著你的相冊截圖來的

也許是印度的程序員鐵子們知道咱快過年了,「特意」在iOS 18.2的系統更新上,新增了一個挺喜慶的bug。
事情是這樣的,有些網民的iPhone更新到了iOS 18.2,在相冊里查看圖片、截圖,然後查看截圖、再截圖,套娃幾次,圖片顏色就會越來越紅。

我願稱之為果粉的春節限定。調侃歸調侃,東尼其實挺好奇這個bug到底是因為什麼?
網上有種說法是這樣的,iPhone在相冊里查看圖片時,用的是sRGB色域,而在系統截圖的時候,圖片則保存成P3色域模式。問題是P3的色彩描述範圍比sRGB大,所以sRGB理解的紅色跟P3理解的紅色是不一樣的。
就比如說,sRGB色域下的純紅標記為(255,0,0),括號中的(R,G,B)值,就是顏色在色彩空間中的位置坐標。如果將它正確映射到P3色域的話,純紅應該被標記為(234,51,35)。
目前來看,iPhone在顏色的映射上不知道出了什麼差錯,總之就是沒對應上。重覆截圖就相當於在倆不一致的色域範圍之間反復橫跳,不斷疊加這個bug,就會導致顏色偏差越來越大,照片最後就「紅溫」了。

當然,這隻是網民的一個說法,不過東尼也簡單測試了一下。
我先是找到了一張原始色域為sRGB的圖片,然後發現,假如在全屏顯示的狀態下截圖,就不會變紅。但是如果帶一點系統UI(比如狀態欄和後台界面什麼的),就會截圖成P3色域,再截圖就會越來越紅,大概率就是系統界面的P3色域映射出了問題。

以前都沒什麼問題,現在突然有這個bug,很難不讓人聯想到蘋果前一陣兒宣佈的系統新功能:
是這麼回事情,蘋果在WWDC24全球開發者大會上,推出了新HDR標準——Adaptive HDR(自適應高動態範圍)。這個新標準,不光能讓相冊、信息、快速查看和預覽支持HDR,甚至連截圖和錄屏的文件也要支持HDR的渲染和顯示。

於是蘋果的截圖就用上了色域更廣、色彩更多的P3色域,但目前看來,代碼還沒調好。按照預想的劇情,蘋果本是想秀一把自家高標準的,但是實際情況卻是整出了新bug。
不過,具體原因到底是不是這麼一回事,可能還得等蘋果官方的結論,不過刷到這次iOS 18出bug的新聞之後,東尼腦袋里立馬就想到了當年安卓的一檔子事。
稍微上了點歲數的差友們可能還有印象,在那個貼吧、論壇鬥圖盛行的年代,很多表情包每多保存、上傳一次,畫面就會變糊一點,到最後,甚至顏色還會詭異地變綠,「電子包漿」就是這麼來的。

為什麼圖片會變糊?表面上的原因大家都知道,無非是用戶在上傳照片時沒有選擇原圖,再加上平台為了節省存儲空間和網絡帶寬,對圖片進行了壓縮處理。
但實際上,即使是壓縮,最多也就是清晰度變差,也不應該變綠。所以本質上,還是當年的安卓在進行轉換的時候,壓縮算法捅出了大簍子。

具體來說,大部分顯示設備,比如咱手裡的手機、顯示屏什麼的,都是基於RGB色彩模式工作的。但在圖像和影片存儲傳輸的過程中,有一種更簡略的、更省計算量的色彩模式,叫做YUV。對這部分感興趣的差友可以自行搜索一下,東尼這裏就不囉嗦了。
總之,在正常情況下,由RGB轉向YUV色彩模式的算法已經很成熟了。就算數據轉換過程中有點兒畫質損失,也不至於出什麼幺蛾子。
但是安卓這邊壓縮圖片的接口,準確地說是一個叫做Skia的圖像庫,為了優化運行速度,想了個偷懶方案:
標準的JPEG圖像在做色彩空間轉換的時候,會用至少16比特精度(也就是2^16種不同的亮度或色度級別),但Skia降低到了8比特。

是的,就是直接降低運算精度,純偷懶。這就導致顏色偏差會越來越大。
再加上安卓為了加快運算過程,在算法方面也出了一些問題。一般來說,絕大多數的RGB值經過複雜的公式,轉換到YUV值時,都會出現小數,但是安卓選擇了直接捨棄小數點後面的部分取整。注意,是直接捨棄,這個操作直接讓用慣了「四捨五入」的東尼噴出一口老血。
於是最後造成的結果就是:亮度值Y不斷變小,圖片不斷變暗,色度值UV也變小了,顏色就不斷向綠色偏移。

再經過鬥圖傳播時圖片的不斷保存、上傳,色彩空間變換算法反復壓縮,圖片就越來越綠。這個bug直到2016年4月中旬(Android 7)才被修復,留下的梗也流傳至今。
相信通過安卓這個編碼錯誤轉換的例子,大家已經看出來了,計算機上的色彩顯示是一個非常複雜的過程,尤其是現在還有好多種常用的不同色域。
比如標準的sRGB,還有廠商們推崇的色域更廣的P3,或者當你看HDR影片的時候,要切換的BT2020色域等等。
顯示這門功課變得越來越複雜,不光蘋果和安卓在色彩空間這件事上翻過車,實際上,微軟到現在也還有問題呢。
比如我們每天都在用的Windows電腦和Chrome瀏覽器,就有一個已經持續存在了兩年,都沒有得到修復的bug:在使用HDR顯示器的時候,畫面經常會映射出一種「慘白」的錯誤顯示效果(圖左),就導致東尼雖然買了支持HDR的顯示器,但日常使用還是要關閉HDR選項。

講到這裏,可能有一部分小夥伴會有疑問,不是一直都誇蘋果的色彩管理方案做得好?那這些問題蘋果也有麼?
其實可以在屏幕顯示性能的測試網站wide-gamut上,通過經典的廣色域測試頁面驗證一下。如果用的是安卓手機或者其他設備,可能只有將圖片保存到系統相冊,才能看見圖片中暗色的「W」,而在瀏覽器里是看不到的。用iPhone就完全沒有這個問題。

雖然安卓手機或者其他設備做到了廣色域顯示,但是沒完全打通第三方,很多時候就只能尷尬地孤芳自賞,在系統相冊里「獨美」。但在蘋果陣營,不需要區分設備、界面和APP,用戶能得到基本一致的顯示效果。
而且直到今天,絕大多數安卓手機和Windows電腦,在查看sRGB之外的色彩空間內容時,要麼需要研究複雜的配置文件,要麼需要安裝專業軟件。可以說基本沒什麼色彩管理可言。
最後回到iPhone截圖變紅的問題,根據目前獲取到的信息,東尼基本相信,就是引入截圖HDR導致的。希望蘋果能盡快修復這個bug,畢竟,蘋果已經是所有各家系統里,在色彩管理、HDR等等方面走得最遠的廠商了。
圖片、資料來源:
微博@冷知識bot
知乎@Lion Yang
CSDN
https://zh.moegirl.org.cn/