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