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文本搞砸了的主要内容,如果未能解决你的问题,请参考以下文章
<br> 标签使用 scrapy 和 python 搞砸了我的数据