You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PIL调整缩放后PNG图片质量无效,如何通过quality参数减小文件大小?

解决PNG图片调整quality参数无效的问题

兄弟,我懂你这种摸不着头脑的感觉!问题出在PNG和JPEG的本质差异以及你对quality参数的理解上,咱们一步步理清楚:

核心原因:PNG是无损压缩格式

PNG本身设计为无损压缩,它的quality参数(在绝大多数图像处理库里,比如Pillow)和JPEG的quality完全不是一回事:

  • JPEG的quality是控制有损压缩的程度:值越低,丢弃的图像数据越多,文件体积越小,画质越差。
  • PNG的quality(如果支持的话)是控制无损压缩的效率:比如Pillow里PNG的quality对应压缩级别(0-9,0最快、压缩率最低;9最慢、压缩率最高),但无论怎么调,它都不会损失图像画质,所以文件大小变化可能极小,甚至完全没变化——这就是你改了参数却没效果的原因!

而且你原始图片是JPEG,转成PNG后相当于把有损的JPEG数据转成了无损存储,这时候再调PNG的quality自然不会让文件变小。

针对需求的解决方案

根据你的目标(降低画质+减小文件大小),分两种情况处理:

情况1:不需要保留PNG格式(推荐)

既然原始是JPEG,直接保留JPEG格式调整quality就能达到你要的效果,这才是正确的打开方式:

from PIL import Image

# 打开原始JPEG图片
img = Image.open("original.jpg")
# 保存为低质量JPEG,quality范围1-100,值越小文件越小、画质越差
img.save("output_low_quality.jpg", quality=30)

情况2:必须使用PNG格式

如果一定要用PNG,要通过减少图像颜色信息或优化无损压缩参数来减小体积:

方法1:转成索引颜色模式(有损压缩PNG)

把真彩色PNG转成256色的索引模式,会大幅减小文件大小(代价是损失部分颜色细节):

from PIL import Image

img = Image.open("original.jpg")
# 转换为自适应256色的索引模式
img = img.convert("P", palette=Image.ADAPTIVE, colors=256)
# 开启优化+最高压缩级别
img.save("output_small_png.png", optimize=True, compress_level=9)

方法2:优化真彩色PNG的压缩率

如果要保留真彩色,调整PNG的compress_level参数(1-9,9是最高压缩率,速度最慢):

from PIL import Image

img = Image.open("original.jpg")
# 保存时设置最高压缩级别
img.save("output_compressed_png.png", compress_level=9)

内容的提问来源于stack exchange,提问作者Ossama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:17:50