2013-05-16 29 views
0

我想知道如何確保PNG圖像具有良好的可壓縮性。請注意,我不是在問如何壓縮PNG圖像(使用像pngcrush這樣的工具),而是如何確保PNG中的圖像內容更容易壓縮。如何提高我的PNG圖像的可壓縮性?

我的問題與減少大型圖像生成系統中的存儲空間需求有關。

該項目將建立和存儲用戶生成的圖像(認爲像一個化身的創造者),所以輸出源代碼片段在我們的控制之下。合成的PNG輸出文件將在服務器端生成並存儲在雲存儲服務中。

每月生成圖像的上限估計值爲幾百萬,因此每個字節都會計數。

當創建將會進入複合輸出圖像以確保良好可壓縮性的原始片段時,我們可以考慮哪些東西?

例如...顏色是否重要?在源圖像數據中是否存在產生較大輸出的好的和不好的顏色漸變?嚴重的抗鋸齒是好還是壞?是否有損耗的方法來處理源圖像以改善PNG可壓縮性?

一般來說,在創建圖像時,是否有任何字節保存提示?

+1

如果你願意改變圖像,那麼爲什麼不使用有損壓縮方法,例如, JPEG?您可以撥打您認爲可接受的最高壓縮級別。 –

+0

因爲我需要輸出中的alpha透明度。 – izb

+0

題外話?常見問題解答允許涵蓋特定編程問題的問題。他們不需要*源代碼。我的問題與減少大規模圖像生成系統中的存儲空間需求有關。它針對那些可能瞭解PNG文件格式操作的人。如果這不是一個話題特定的編程問題,那麼我不知道是什麼。 – izb

回答

2

PNG壓縮是基於本地(一個像素鄰域)預測,然後是ZLIB壓縮。因此,如果我們要處理真彩色(RGB)圖像,則需要大量統一區域,最好在水平或垂直方向上,或者非常平滑,以便預測誤差很小。這也有助於圖像顏色很少,因爲那樣預測錯誤將會重複(並且Zlib會很好地壓縮)。 因此,爲PNG保存預處理PNG真彩色圖像的一個簡單的方法是後貼它。 當然,如果您的顏色真的很少,您可以選擇將其保存爲索引(調色板)PNG,這會使圖像明顯變小,並且之前的考慮(局部平滑)的問題更少。 因此,問題很複雜。

重度抗鋸齒好壞?

抗鋸齒與JPEG很好地結合在一起,PNG很難說:它使圖像更平滑,但它創造出更多的顏色。正如一條評論所述,如果你容忍有損壓縮(如果你不需要alpha),你通常更喜歡使用JPEG。

1

圖像中的許多「獨特」區域會增加文件大小。所以確保更好壓縮的一種方法是在圖像中有許多相似或甚至相同的區域。例如,如果您的圖像包含主題,請嘗試並確保背景爲純白色或黑色。還可以嘗試通過裝箱或模糊來減少圖像中的顏色數量,以達到應用程序要求可以容忍的程度。希望這可以幫助。