2013-04-11 145 views
1

我正在加載一些圖像,我想從PNG轉到JPG以獲得較小的文件大小。然而,作爲JPG沒有透明度信息,所以圖像的背景顯示爲白色。使JPG白色背景透明

一旦我加載我的圖像,我怎樣才能使這個白色背景變得透明?

預先感謝

+0

只需在代碼中將所有白色像素設置爲transperant?雖然我不推薦使用白色。 – 2013-04-11 01:01:57

+0

重複的問題? http://stackoverflow.com/q/12598912/2266191 JPEG不允許透明度。 – 2013-04-11 01:07:46

+2

你應該堅持使用Flash中的PNG。 Flash渲染PNG實際上比JPG更快(這聽起來奇怪,因爲PNG有額外的通道,但這是Adobe過去曾經說過的) – 2013-04-11 01:14:48

回答

2

我假設您想要在運行時將白色像素更改爲透明像素。首先,我只說最好的答案就是使用PNG格式。我的觀點是,在運行時這樣做是不是一個好的解決方案。如果你有許多圖像文件大小很重要,那麼運行時處理會在處理圖像時帶來長時間停頓的負面影響。

我個人會探討我可以做些什麼來減小PNG文件的大小,並且可能永遠不會使用這樣的解決方案。

但是,如果你選擇走這條路線,你需要做的是這樣的:

  • 將圖像轉換爲BitmapData用alpha通道。

  • 循環訪問BitmapData並使這些像素透明。

  • 使用的BitmapData的threshold()方法。

正如有人在你的問題的評論中提到的那樣,使用白色作爲背景顏色並不是一個好主意,因爲所有的白色像素都將變得透明,而不僅僅是背景。

因此,選擇一種顏色,是不是在任何這些圖像的調色板是要用作背景色

作爲一個評論者指出的,的BitmapData的threshold()方法可能會工作最好使用什麼。

+0

閾值()不會更好嗎?請注意,BitmapData需要創建透明才能正常工作。 – 2013-04-11 01:40:25

+0

如果您注意到第一個項目符號點,則它指定使用Alpha通道創建BitmapData。是的,門檻也會起作用。 – prototypical 2013-04-11 03:40:28

1

JPG(從技術上講,JPEG文件交換格式)文件,所理解的普通瀏覽器和圖形應用,不支持存儲alpha通道與像PNG確實圖像。根據您的應用程序,您可能需要存儲單獨的黑白「圖像」文件,該文件是JPG的透明度蒙版,並使用該對。可以在定製軟件中使用的格式有擴展名,但在其他地方不能理解。

但首先,確保JPG真的是你想要使用的。 JPG只適用於「照相」圖像,通常不具有透明度蒙版(雖然有一些例外)。如果圖像更像Icon/Drawing-like,那麼很可能JPG不會比PNG小很多,並且具有醜陋的混疊僞像,所以只需優化PNG就可以帶來更好的效果。

+0

儘管JPEG文件格式的技術描述是準確的,但一旦導入的資源位於庫中,其原始文件格式與是否可以在Flash中以像素級別操作無關,結果OP所要做的不太可能是好的,因爲他們可能想要透明的很多像素不會是0xFFFFFF,但這並不意味着它不能完成。 – 2013-04-11 01:45:29

+0

是,可能還有一些其他的解決方法:例如,減少原始圖像的動態範圍,使其中沒有白色,然後將全白色視爲透明。但正如您指出的那樣,許多確切的像素值不會su如果使用DCT,那麼在透明區域會出現一些幾乎是白色的斑點,並且圖像中可能會出現一些小洞。 JPG只是不適合這項工作的正確工具。因此,我建議要麼堅持使用PNG,要麼使用單獨的PNG作爲掩碼。 – 2013-04-11 03:02:08

0

您可能想考慮將png嵌入到Flash庫中,然後以swf格式導出。然後你可以使用Flash來使用有損JPEG算法來壓縮你的PNG,但它仍然會保持alpha通道。這可能導致更小的文件大小,但保留8位alpha通道(每個像素具有256個透明度級別)的好處。

通過掩蓋特定顏色,您將只能得到1位alpha蒙版(像素可以完全可見或完全隱藏)。您也可以遇到像圖像中的顏色與無光澤的顏色,從您想要顯示的實際圖像中刪除像素。

在JPEG圖像中使用啞光顏色的另一個問題是JPEG壓縮會留下僞影,特別是在對象的邊緣和無光澤顏色的周圍。這使得很難正確掩蓋特定的顏色。