我正在尝试动态地增加图像大小,使其与提供给draw.text()
的字体和文本相关。
原始问题是根据名称和用户选择的字体创建签名图像。
以下是我的代码
from PIL import (Image, ImageDraw, ImageFont,)
width=20
height=20
selected_font='simply_glomrous.ttf'
font_size=30
img = Image.new('RGBA', (width, height), (255, 255, 255, 0))
draw = ImageDraw.Draw(img)
font = ImageFont.truetype(selected_font, font_size)
draw.text((0,0), "Adil Malik", (0,0,0), font)
img.save('signature.png')
但是我仍然在宽度和高度上定义了相同的图像大小。我们可以根据字体和大小动态调整图像的大小吗?
注意:这个问题与this stackoverflow question相反
发布于 2017-09-18 15:07:56
不幸的是,没有人能够回答我的问题。
基本上,你不能在设置字体大小时设置固定的宽度和高度。两者都是相互依赖的。所以如果一个增加了,第二个也增加了。
所以我想出了另一个解决方案。我只是设置字体大小,然后根据字体大小设置宽度和高度。
from PIL import (Image, ImageDraw, ImageFont,)
name = 'Adil Malik'
selected_font='simply_glomrous.ttf'
font_size=30
font = ImageFont.truetype(selected_font, font_size)
font_size = font.getsize(name)
img = Image.new('RGBA', (font_size[0], font_size[0]), (255, 255, 255, 0))
draw = ImageDraw.Draw(img)
font = ImageFont.truetype(selected_font, font_size)
draw.text((0,0), name, (0,0,0), font)
img.save('signature.png')
发布于 2017-09-19 00:09:43
发布于 2017-09-13 14:03:38
您正在寻找的功能是Draw.textsize
方法,它接受文本字符串和绘图选项作为输入,并返回呈现文本的宽度和高度。
http://effbot.org/imagingbook/imagedraw.htm#tag-ImageDraw.Draw.textsize
可以对宽度和高度均为零的图像使用Draw
类,然后调用该方法来确定要呈现的文本的尺寸。一旦知道了这些尺寸,就可以相应地调整图像的大小。例如:
from PIL import ImageDraw, ImageFont, Image
# parameters
text = "My Name"
selected_font = "simply_glomrous.ttf"
font_size = 30
# get the size of the text
img = Image.new('RGBA', (0,0), (255, 255, 255, 0))
font = ImageFont.truetype(selected_font, font_size)
draw = ImageDraw.Draw(img)
text_size = draw.textsize(text, font)
# resize and draw
img = img.resize(text_size)
draw.text((0,0), text, (0,0,0), font)
img.save('signature.png')
https://stackoverflow.com/questions/45878501
复制相似问题