使用PIL在Python中压缩PNG图像

12

我有一个使用Selenium Builder记录的Python脚本,它使用以下代码对网页进行全屏截图:

fileName = "Screenshot1.png"
webDriverInstance.save_screenshot(fileName)

由于页面很长且需要完整的浏览器截图,文件大小约为3.5 MB。我需要一种方式来压缩保存的屏幕截图,或将它们保存为更小的PNG图像文件,以便我可以使用另一个Python脚本(带有smtplib)在同一封电子邮件中附加并发送多个这样的截图。

我尝试过以下方法:

fileName = "Screenshot1.png"
foo = Image.open(fileName)
fileName2 = "C:\FullPath\CompressedImage.png"
foo.save(fileName2, "PNG", optimize = True)

然而,这似乎并没有起作用。两个文件Screenshot1.png和CompressedImage.png的大小相同(约为3.5 MB)。

我尝试了几种使用save方法的选项,但似乎都无法正常工作。当我运行脚本时没有收到任何错误提示,但文件大小也没有减小。

foo.save(fileName2, "PNG", optimize = True, compress_level = 9)
foo.save(fileName2, "PNG", optimize = True, quality = 20)

我正在使用Python 2.7。有什么建议吗?


嗨,请查看https://dev59.com/52kv5IYBdhLWcg3wbgMx - murali selenium
这个有效。谢谢! - smishra
2
等一下...链接和你之前做的有什么区别? - Mateen Ulhaq
2个回答

6

我看到有两种方法可以用PIL库实现,假设给定一个RGB图像。

1- 缩小图像分辨率(因此可能会降低质量 - 你可能不想要这个)。使用PIL提供的Image.thumbnail()Image.resize()方法。

2- 减少图像的色彩范围(颜色数量将相应影响文件大小)。这是许多在线转换器所做的。

img_path = "img.png"
img = Image.open(img_path)
img = img.convert("P", palette=Image.ADAPTIVE, colors=256)
img.save("comp.png", optimize=True)

0

PNG格式仅支持无损压缩,压缩比通常受限且不可自由调整。

如果我没记错的话,有一个可变参数告诉压缩器花费更多或更少的时间寻找更好的压缩方案。但是并不能保证一定成功。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接