python PIL png文本搞砸了

Posted

技术标签:

【中文标题】python PIL png文本搞砸了【英文标题】:python PIL png text get messed up 【发布时间】:2021-04-01 13:33:39 【问题描述】:

我想将我用 matplotlib 生成的多个 png 合并到一个新的 png 中。 现在,当我使用 PIL 加载和保存任何 png 时,文本完全搞砸了,变得不可读。

from PIL import Image

img_zraw_box = Image.open('tmp_zraw_box0.png')
img_result = Image.new('RGB', (img_zraw_box.width, img_zraw_box.height))
img_result.paste(img_zraw_box, (0, 0))
img_result.save('tmp_zraw_box1.png')

原始matplotlib png:

png 打开,过去并使用 PIL 保存:

有没有人知道出了什么问题,我该如何解决这个问题? 谢谢你,埃尔玛

【问题讨论】:

您遗漏了一些重要的细节。我相当确定在 PIL 中粘贴图像并没有添加所有文本、注释、轴和标题。 @MarkSetchell,我唯一要做的,就是拿第一个 png,运行上面的代码,得到第二个 png。请尝试,如果您得到另一个输出,请在此处加载。我在两台不同的计算机(都是 linux)上进行了尝试,得到了相同的结果。请仔细看看。文字和标题都在第一张图片中。他们只是通过 PIL 变得又胖又丑。 开,我明白了。顶部的图像被注释,几乎是不可见的!尝试向paste() 添加一个额外的参数,例如img_result.paste(img_zraw_box, (0, 0), img_zraw_box) 非常好——很高兴它成功了。这里已经很晚了。欢迎您将其写成答案并接受并抓住要点。或者我明天找时间做。 @MarkSetchell,你是个巫师!我刚刚阅读了文档字符串。这是我们设置的掩码参数。很高兴知道。实际上,通过 Image.new 我必须将颜色设置为“白色”,它确实有效。但这完全解决了问题。重点是你的!我将在评论中为您编写正确的代码。非常感谢! 【参考方案1】:

我认为您需要将 mask 参数添加到您的 PIL paste() 调用中,以便正确尊重 alpha 通道:

from PIL import Image
img_zraw_box = Image.open('tmp_zraw_box0.png')

# Create a solid white background to paste onto
img_result = Image.new('RGB', (img_zraw_box.width, img_zraw_box.height), color='white')

# Paste with alpha mask
img_result.paste(img_zraw_box, (0, 0), mask=img_zraw_box)
img_result.save('tmp_zraw_box1.png')

【讨论】:

以上是关于python PIL png文本搞砸了的主要内容,如果未能解决你的问题,请参考以下文章

文本渲染在 IE 上被“渐变”搞砸了

<br> 标签使用 scrapy 和 python 搞砸了我的数据

ggtext 格式被 ggsave 搞砸了

相对布局搞砸了如何固定它的位置

在magento的Jm siotis主题中将产品设置为oos时,产品布局搞砸了

在 Python 中向现有 PDF 文档添加文本