使用PIL将图像转换为RGBA时出现画质损坏问题求助
16位灰度PNG转RGBA失真的解决办法
你的问题根源是:直接用convert("RGBA")处理16位灰度图时,PIL默认会把16位数据(0-65535)强行压缩成8位(0-255),导致灰度信息严重丢失,图像自然失真。
解决思路是明确保留16位的位深度,有两种简单的实现方式:
方法一:指定16位RGBA模式转换
直接在convert时指定"RGBA;16"模式,让PIL保留16位数据:
from PIL import Image img = Image.open("input_image.png") # 明确转换为16位RGBA格式 img_rgba = img.convert("RGBA;16") img_rgba.save("output_image.png")
方法二:手动合并16位通道
如果某些PIL版本对"RGBA;16"支持不好,可以手动拆分并合并通道:
from PIL import Image img = Image.open("input_image.png") # 确认输入是16位灰度图(模式为"I;16") if img.mode == "I;16": # R/G/B通道复用原灰度数据,Alpha通道设为全不透明的16位最大值65535 r_channel = img.copy() g_channel = img.copy() b_channel = img.copy() a_channel = Image.new("I;16", img.size, 65535) # 合并为16位RGBA图像 img_rgba = Image.merge("RGBA;16", (r_channel, g_channel, b_channel, a_channel)) img_rgba.save("output_image.png")
两种方法都能让输出图像和输入保持一致,不会出现失真问题。
内容的提问来源于stack exchange,提问作者Xabier
相关产品推荐
相关产品推荐

