如何使用 python PIL 获得平滑的文本?

问题描述 投票:0回答:1

在我的脚本中,我打开一个 tiff 图像,并且必须使用 PIL 在其右下角粘贴一些文本。到目前为止,一切都很好。但文字质量无法使用!文本应该是白色的。相反,它的像素被剪掉了。看起来,当将文本复制到原始图像上时,Alpha 通道上有一个截止点。即使在 Image.paste 中设置 mask 属性也没有区别。

我认为这是基本的东西。有没有办法在 PIL 中获取图像上的可用文本?或者有更好的套餐吗?

我使用的是 MacBook Pro Ventura 13.4.1、PIL 10.0.1、Python 3.8

from PIL import Image as PILImage, ImageDraw, ImageFont
import math

padding = (10, 16)
img = PILImage.open('/path/to/tiff/image.tiff')
draw = ImageDraw.Draw(img)

text = 'Holi Moli, this looks terrible'
font = ImageFont.truetype('/path/to/font/FreeMono.ttf', 24)
text_img = PILImage.new('RGB', img.size, (255, 255, 255))
textImg = ImageDraw.Draw(text_img)

# get size of rendered text
bbox = draw.textbbox((0,0), text, font)
# calculate position of text background
bgX = img.width - padding[0] - bbox[2]
bgY = img.height - padding[1] - bbox[3]
textX = img.width - math.ceil(padding[0] * 0.5) - bbox[2]
textY = img.height - math.ceil( padding[1] * 0.5) - bbox[3]
draw.text(xy=(textX, textY), text=text, font=font, fill=(255, 255, 255, 0))

img.paste(im=draw._image, box=(0, 0), mask=draw._image)
img.show()

包含此存储库中的 exif 数据的示例图像:https://github.com/ianare/exif-samples/tree/master/tiff

python python-imaging-library
1个回答
0
投票

不知道为什么你有这两行:

text_img = PILImage.new('RGB', img.size, (255, 255, 255))
textImg = ImageDraw.Draw(text_img)

我也不知道为什么当你已经绘制了文本时还要将文本粘贴到图像上。因此,如果您简化代码以融入上述想法,您将得到:

#!/usr/bin/env python3

from PIL import Image as PILImage, ImageDraw, ImageFont
import math

padding = (10, 16)
img = PILImage.open('BSG1.tiff')
draw = ImageDraw.Draw(img)

text = 'Gar nicht übel'
font = ImageFont.truetype('/Users/mark/Library/Fonts/FreeMono.ttf', 24)

bbox = draw.textbbox((0,0), text, font)
# calculate position of text background
bgX = img.width - padding[0] - bbox[2]
bgY = img.height - padding[1] - bbox[3]
textX = img.width - math.ceil(padding[0] * 0.5) - bbox[2]
textY = img.height - math.ceil( padding[1] * 0.5) - bbox[3]
draw.text(xy=(textX, textY), text=text, font=font, fill=(255, 255, 255))

img.show()

© www.soinside.com 2019 - 2024. All rights reserved.