2017-03-27 36 views
4

如果我使用pququant壓縮和打印圖像,然後使用PIL讀寫,我會看到文件大小顯着增加(有時高達2倍)。任何人有任何提示嗎?我懷疑它可能與一些PIL標誌有關,但對它不夠熟悉。使用PIL時pngquant輸出的文件大小增加

+0

PIL的'open()'和'save()'行是什麼?如果您在沒有任何修改的情況下打開後保存,您的尺寸是否會相同? – hurturk

+0

你能提供一個[MCVE](http://stackoverflow.com/help/mcve)嗎? – Leon

+0

這是您提供的所有信息? –

回答

3

,然後讀取,並與PIL寫出來,我看到的文件大小增加顯著(有時高達2倍)

由於PNG是無損的,因此不會引入假象,可能是與其他有問題編碼器,我看到的只有三個真正的可能性:

  • 您使用的是不同的比特深度節能(例如8位輸入,輸出24位)
  • 你添加了阿爾法informati節約
  • 調色板被大量重新排序(這不應該保存或丟失超過百分之幾,但沒有看到實際圖像,如果2x是例外情況並且規則接近1.2x,則有可能的)

對於內非常小的文件,非圖像塊可能是問題的一部分,如果PIL再補充一些數據,pngquant刪除。抓住一些PNG診斷工具,可以傾倒所有塊(PLTE,tEXT等)的列表和大小,並查看實際增加的位置(Quick google link)。如果內存不足,advpng會使用一個被騙的zlib來提高性能),但除非我們談論的文件足夠小,甚至幾個字節可能是重要的,否則zLib也可能是導致問題的原因。

+1

我是一個白癡,並改變位深度,如你所建議的。這與其他一些問題相結合導致了爆炸。感謝您的幫助,特別是在回頭看來,我絕對沒有提到這個問題的背景(......對不起,這是漫長的一天)。 – JPC

0

除非您修改任何RGBA或用不同的settings保存,否則讀寫PNG幾乎不會影響文件大小,無論您使用的是哪種庫或應用程序。

使用pngquant概念證明生成的圖像和PIL:

$ wget https://pngquant.org/Ducati_side_shadow-fs8.png 
$ python 
>>> from PIL import Image 
>>> im = Image.open("Ducati_side_shadow-fs8.png") 
>>> im.rotate(180).save("output.png") 
$ stat -c "%s %n" *.png 
23405 Ducati_side_shadow-fs8.png 
23362 output.png 

在以上示例中,output.png是比原來的更小,甚至43個字節。我們將它旋轉倒置,但沒有觸及顏色或alpha。