我有以下RGBA 2像素PNG圖像:顯示時,瀏覽器是否更改了png rgba數據?
image.setAt(0, 0, { red:255, green:10, blue:10, alpha:100 });
image.setAt(1, 0, { red:255, green:255, blue:55, alpha:255 });
image.setAt(0, 1, { red:90, green:10, blue:65, alpha:250 });
image.setAt(1, 1, { red:60, green:255, blue:0, alpha:14 });
(使用節點的pngjs圖像模塊)
當圖像是由瀏覽器(Firefox)加載並複製到畫布測試rgba數據,將返回以下內容:
255 7 7 100
255 255 55 255
89 9 64 250
54 255 0 14
似乎只有Alpha通道值被保留,而像素顏色被任意改變。
發生了什麼事?
(使用Firefox 41在Linux上)
編輯
從介紹上pngtoy的NodeJS模塊我發現以下幾點:
PNG文件解析器/讀者的低級實現/解碼器使用 客戶端大小的JavaScript。
爲什麼當瀏覽器支持PNG時呢?
瀏覽器將簡單地加載並將任何PNG類型轉換爲RGBA 位圖。它還會對圖像 應用ICC和伽馬校正,從而產生與原始位圖不同的值。
但是,我認爲PNG本身應該有ICC和Gamma校正塊,以便瀏覽器應用它們。瀏覽器是否對任何PNG文件進行這種圖像處理,即使文件內沒有ICC / gamma塊?
火狐的行爲取決於gfx.color_manangement.mode有關設置:配置(默認值是2,嘗試重置它爲0,看看會發生什麼),以及您的2x2的圖像是否包含色彩管理信息(GAMA(sRGB)中, cHRM和/或iCCP塊)。如果您發佈實際的PNG文件的副本,這將會很有幫助。 –
稍後我會放入原始日期。用gfx播放沒有成功。沒有其他數據在PNG中:只有IHDR,IDAT和IEND塊在裏面。 – rlib
好的消除了color_management。剩下的可能是轉換爲預乘alpha和後。如果你有一個alpha == 0的彩色像素,會發生什麼? –