2015-10-25 34 views
0

我有以下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塊?

+0

火狐的行爲取決於gfx.color_manangement.mode有關設置:配置(默認值是2,嘗試重置它爲0,看看會發生什麼),以及您的2x2的圖像是否包含色彩管理信息(GAMA(sRGB)中, cHRM和/或iCCP塊)。如果您發佈實際的PNG文件的副本,這將會很有幫助。 –

+0

稍後我會放入原始日期。用gfx播放沒有成功。沒有其他數據在PNG中:只有IHDR,IDAT和IEND塊在裏面。 – rlib

+0

好的消除了color_management。剩下的可能是轉換爲預乘alpha和後。如果你有一個alpha == 0的彩色像素,會發生什麼? –

回答

2

Firefox將alpha圖像轉換爲預乘alpha的圖像供內部使用。如果您的工作流程正在從Firefox的內部圖像緩衝區中恢復圖像,那麼在反轉預倍數Alpha時將會失去精度。在極端情況下,無論原始PNG中的基礎顏色如何,alpha等於零的像素都將返回爲透明黑色。這種效果不取決於顏色管理塊是否存在。

注意,當你點擊一個PNG圖像上,這不會發生「另存爲...」;在這種情況下,原始的PNG被返回。

當色彩管理塊(iCCP,sRGB,gAMA和/或cHRM)出現時,Firefox也可能會修改內部圖像(取決於gfs.color_management.mode在「about:config」中的設置),但是似乎並不是這個特定問題的情況。再次,「另存爲...」將返回原來的像素和色彩管理塊不變。

+0

太好了,謝謝! – rlib

相關問題