如何用Python Pillow将灰度JPEG转为RGB并保留原有图像质量?
问题原因
Pillow的Image.save()方法保存JPEG格式文件时默认使用75的质量参数,不会自动继承原文件的质量配置,这是转换后画质下降的核心原因。
解决方法
你只需要在保存时显式传入原图的质量参数即可,完整代码如下:
from PIL import Image # 读取灰度原图 gray = Image.open("gray.JPEG") # 从原图属性中提取质量参数,取不到时兜底用95 orig_quality = gray.info.get("quality", 95) # 转换为RGB三通道格式 rgb = gray.convert("RGB") # 保存时传入原质量参数,开启optimize优化不损失画质 rgb.save("rgb.JPEG", quality=orig_quality, optimize=True)
进阶优化(可选)
如果需要更严格对齐原文件的压缩配置,还可以一并传入原图的量化表进一步降低画质损耗:
from PIL import Image gray = Image.open("gray.JPEG") orig_quality = gray.info.get("quality", 95) orig_quant = gray.info.get("quantization") rgb = gray.convert("RGB") save_kwargs = {"quality": orig_quality, "optimize": True} if orig_quant: save_kwargs["quantization"] = orig_quant rgb.save("rgb.JPEG", **save_kwargs)
修改后保存的文件用jhead查询即可看到质量参数和原图一致,画质基本无损耗。
内容的提问来源于stack exchange,提问作者user650654
相关产品推荐
相关产品推荐

