首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PIL如何根据图像上绘制的文本缩放图像

PIL如何根据图像上绘制的文本缩放图像
EN

Stack Overflow用户
提问于 2017-08-25 17:33:22
回答 4查看 6.2K关注 0票数 16

我正在尝试动态地增加图像大小,使其与提供给draw.text()的字体和文本相关。

原始问题是根据名称和用户选择的字体创建签名图像。

以下是我的代码

代码语言:javascript
复制
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相反

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-09-18 15:07:56

不幸的是,没有人能够回答我的问题。

基本上,你不能在设置字体大小时设置固定的宽度和高度。两者都是相互依赖的。所以如果一个增加了,第二个也增加了。

所以我想出了另一个解决方案。我只是设置字体大小,然后根据字体大小设置宽度和高度。

代码语言:javascript
复制
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')
票数 14
EN

Stack Overflow用户

发布于 2017-09-19 00:09:43

如果你能使用openCV和numpy,你就可以

  1. 使用numpy.ones检查文本大小((height,width,3),使用putText将文本保存到图像,
  2. 使用imwrite保存图像。

有关参考信息,请参见herehere

票数 4
EN

Stack Overflow用户

发布于 2017-09-13 14:03:38

您正在寻找的功能是Draw.textsize方法,它接受文本字符串和绘图选项作为输入,并返回呈现文本的宽度和高度。

http://effbot.org/imagingbook/imagedraw.htm#tag-ImageDraw.Draw.textsize

可以对宽度和高度均为零的图像使用Draw类,然后调用该方法来确定要呈现的文本的尺寸。一旦知道了这些尺寸,就可以相应地调整图像的大小。例如:

代码语言:javascript
复制
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')
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45878501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档