使用PIL优化.png格式图片

6

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

看起来PIL会自动以32位模式保存.png图像。在保存之前,我能否减少颜色深度而不使输出图像看起来更糟糕?由于它只包含黑色文本和透明背景,我认为减少颜色深度将大大减小文件大小。


4
设置“optimize”标志的正确语法是:img.save('target.png', optimize=True) - Martijn Pieters
@martineau,那个链接已经失效了,你有备用链接吗? - Steven Roose
1
@StevenRoose:是的,请尝试此链接 - martineau
1个回答

2
<最初的回答> RGBA 模式是唯一支持透明度的模式,必需是32位。以下是不同模式的说明:

1 二值图像(1位像素,黑白)

L 8位灰度图像(白到黑,共256阶)

P 8位彩色图像(使用调色板映射到任何其他模式)

RGB 真彩色图像(3x8位像素,红绿蓝三个通道,共1677216种颜色)

RGBA 带有透明掩膜的真彩色图像(4x8位像素,加上一个alpha通道来表示透明度)

建议您将图像存储为不带透明度的1模式,并将图像本身用作掩膜。如果您将1模式的图像作为掩膜添加到您的图像上,则黑色像素将保留原样,而白色像素将变成透明。这样可以节省空间,而且不会损失任何信息。这样做所需的空间比直接使用RGBA模式少32倍。

您可以使用“1”、“L”或“RGBA”图像(在后一种情况下,alpha通道用作掩膜)。其中掩膜为255的像素将直接复制。掩膜为0,则保留当前值。中间值将混合两个图像,包括它们的透明通道(如果有)。

效果如下所示:
your_transparent_image.paste(bw_image, mask=bw_image)

where bw_image is your black and white text.


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