0

我試圖將文件夾中的所有圖像縮小到各自大小的90%。寫到這:縮小PNG圖像會增加圖像大小

from PIL import Image 
import sys, csv, os, traceback 

path = "C:\Users\Dell\Desktop\Textures\\" 
dirs = os.listdir(path) 
scalingFactor = .9 

def resize(): 
for item in dirs: 
    print 'item', path+item 
    if os.path.isfile(path+item): 
     im = Image.open(path+item) 
     f, e = os.path.splitext(path+item) 
     imResize = im.resize((int(im.size[0]*scalingFactor),int(im.size[1]*scalingFactor)), Image.ANTIALIAS) 
     fileName = f.split('\\')[-1] 
     imResize.save(path + "/Out/" + fileName + ' resized_' + str(scalingFactor) + ".png" , 'PNG') 

然而,當我運行它,圖像的大小實際上是增加而不是減少的(如我期望的那樣)。

例如。原始圖像885x1130 466KB

enter image description here

輸出圖像796x1017 1.44 MB!

enter image description here

邊旋轉邊,就有了一個explanation about it here on Stackoverflow我有一個相當類似的非直觀的體驗與之前的PNG。但我無法相信自己這也許是同一個問題。

任何線索?還有什麼我可以做的,以減少PNG的大小?如果需要的話,質量有點損失是可以的。

+1

你縮放這些圖片了,因爲你想要的更小的像素大小?或者你是否試圖減小文件的字節大小? –

+3

請注意,使用抗鋸齒縮放可以創建原始中不存在的中間色的_lot_,並且可以改變圖像的可壓縮性。 PNG具有許多壓縮選項,但很少有程序允許您訪問允許「調整」壓縮的參數,並選擇最佳參數是一項複雜的任務。有幾個PNG重新壓縮程序漂浮在附近;我使用&推薦[OptiPNG](http://optipng.sourceforge.net)。 –

+0

@ PM2Ring我想要更小的文件大小。是的,我使用OptiPNG作爲後期處理的一部分,但並沒有將尺寸縮小到我想要的程度。所以我想縮小它,並期望減小文件大小。 –

回答

1

您已使用Image.ANTIALIAS濾波器,它是一種高質量下采樣濾波器。

要縮小圖像的大小,您可以在保存圖像時使用optimize=Truequality=90。 Like -

imResize.save(path + "/Out/" + fileName + ' resized_' + str(scalingFactor) + ".png" ,optimize=True,quality=90) 

優化標誌將對圖像執行額外的傳遞以找到儘可能減小尺寸的方法。

現在爲了進一步縮小尺寸,您可以在保存選項中更改質量值。

我更喜歡質量85與optimize因爲質量沒有太大的影響,並且文件的大小更小。

希望這會有所幫助!


只需添加到您的答案,所有的過濾器在這裏列出來作出有關決定品質VS執行速度等

http://pillow.readthedocs.io/en/3.4.x/handbook/concepts.html#concept-filters

+0

謝謝@amit。很好的幫助! – Tanu