使用 PIL 优化 .png 图像

发布于 2024-08-16 23:51:15 字数 210 浏览 5 评论 0原文

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

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

All I need is to create a .png image with transparent background, draw some text in black on it and save it using img.save('target.png', option='optimize')

It looks like PIL saves .png images in 32-bit mode automatically. Can I reduce the color depth while not making the output images look much worse before saving? Since it contains only black text and transparent background, I think reducing the color depth would greatly reduce file size.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

ι不睡觉的鱼゛ 2024-08-23 23:51:15

RGBA 模式是唯一支持透明度的模式,并且它必须是 32 位:

1(1 位像素,黑白,每字节一个像素存储)

L(8 位像素,黑白)

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

RGB(3x8 位像素,真彩色)

RGBA(4x8 位像素,带透明蒙版的真彩色)

我建议您使用非透明 1 模式存储图像,并使用图像本身作为蒙版。如果您将模式 1 的图像作为图像上的蒙版,黑色像素将保留,白色像素将是透明的。 这将占用 32 倍的空间,且不会丢失任何信息。

您可以使用“1”、“L”或“RGBA”图像(在后一种情况下,alpha 波段用作遮罩)。如果掩码为 255,则按原样复制给定图像。如果掩码为 0,则保留当前值。中间值会将两个图像混合在一起,包括它们的 Alpha 通道(如果有)。

它看起来像这样:

your_transparent_image.paste(bw_image, mask=bw_image)

其中 bw_image 是黑白文本。

The RGBA mode is the only mode that supports transparency, and it is necessarily 32 bits:

1 (1-bit pixels, black and white, stored with one pixel per byte)

L (8-bit pixels, black and white)

P (8-bit pixels, mapped to any other mode using a color palette)

RGB (3x8-bit pixels, true color)

RGBA (4x8-bit pixels, true color with transparency mask)

I would recommend you to store your image with a non-transparent 1 mode and use the image itself as a mask. If you give your image with mode 1 as a mask on your image, black pixels will stay and white ones will be transparent. This will take 32 times less space without any loss of information.

You can use either “1”, “L” or “RGBA” images (in the latter case, the alpha band is used as mask). Where the mask is 255, the given image is copied as is. Where the mask is 0, the current value is preserved. Intermediate values will mix the two images together, including their alpha channels if they have them.

It will look something like this:

your_transparent_image.paste(bw_image, mask=bw_image)

where bw_image is your black and white text.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文