使用PIL优化.png图像

6 投票
1 回答
11388 浏览
提问于 2025-04-15 17:33

我只需要创建一个透明背景的 .png 图片,在上面用黑色写一些文字,然后用 img.save('target.png', option='optimize') 保存它。

看起来 PIL 会自动以 32 位模式保存 .png 图片。我能否在保存之前降低颜色深度,而不让输出的图片看起来差太多?因为它只包含黑色文字和透明背景,我觉得降低颜色深度会大大减小文件大小。

1 个回答

2

RGBA模式是唯一支持透明度的模式,而且它的大小一定是32位:

1(1位像素,黑白色,每个像素占用一个字节)

L(8位像素,黑白色)

P(8位像素,使用调色板映射到其他模式)

RGB(3个8位像素,真实颜色)

RGBA(4个8位像素,真实颜色加上透明度掩码)

我建议你用不透明的1模式来存储你的图片,并把这张图片本身当作掩码。如果你把1模式的图片作为掩码应用到你的图片上,黑色像素会保留,而白色像素会变成透明。这样做会节省32倍的存储空间,而且不会丢失任何信息。

你可以使用“1”、“L”或“RGBA”格式的图片(在后者的情况下,透明度通道用作掩码)。在掩码值为255的地方,原图像会被完整复制;在掩码值为0的地方,当前的像素值会被保留。中间值会将两张图片混合在一起,包括它们的透明度通道(如果有的话)。

效果大概是这样的:

your_transparent_image.paste(bw_image, mask=bw_image)

其中bw_image是你的黑白文本。

撰写回答