gpt4 book ai didi

python - ImageFont 的 getsize() 没有得到正确的文字大小?

转载 作者:太空狗 更新时间:2023-10-30 00:52:30 26 4
gpt4 key购买 nike

我使用以下两种方法为.ttf 字体文件生成文本预览图像

PIL方法:

def make_preview(text, fontfile, imagefile, fontsize=30):
try:
font = ImageFont.truetype(fontfile, fontsize)
text_width, text_height = font.getsize(text)
img = Image.new('RGBA', (text_width, text_height))
draw = ImageDraw.Draw(img)
draw.text((0, 0), text, font=font, fill=(0, 0, 0))
return True
except:
return False

ImageMagick 方法:

def make_preview(text, fontfile, imagefile, fontsize=30):
p = subprocess.Popen(['convert', '-font', fontfile, '-background',
'transparent', '-gravity', 'center', '-pointsize', str(fontsize),
'-trim', '+repage', 'label:%s' % text, image_file])
return p==0

这两种方法大部分时间都能创建正确的预览图像,但在极少数情况下 (<2%),font.getsize(text) 无法获得正确的文本大小,导致文本溢出提供的 Canvas 。 ImageMagick 有同样的问题。

示例字体和预览:

HANFORD.TTF http://download.appfile.com/HANFORD.png

NEWTOW.TTF http://download.appfile.com/NEWTOW.png

MILF.TTF http://download.appfile.com/MILF.png

SWANSE.TTF http://download.appfile.com/SWANSE.png

我查看了 ImageMagick 的文档并在 找到了对这个问题的解释。 http://www.imagemagick.org/Usage/text/#overflow .

是否有可能检测到此类文本溢出并按照我们的预期绘制文本以适合 Canvas ?

最佳答案

alt text

不是编程解决方案,但当我重新生成您的问题时,它只发生在您的字体上(其他字体如 Arial 完全没有问题),所以我已经修复了您的字体文件(通过更改 ascent/decent 指标)。你可以下载here ,

抱歉,关于 Hanford Script 字体,它并不像你看到的那样完美,高度似乎还可以,但左侧没有被绘制,这超出了我的理解。

更新:关于 Hanford 字体,这里有一个解决方法,在文本中传递额外的空间,如 "Handford Script",然后裁剪图像中的额外空间,如 img=img.crop(img.getbbox())

alt text http://img64.imageshack.us/img64/1903/hanfordfontworkaround.jpg

UPDATE2:我必须在 Image.New 中传递 color=(255,255,255) 才能获得白底黑字

img = Image.new('RGBA', (text_width, text_height),color=(255,255,255))

alt text

关于python - ImageFont 的 getsize() 没有得到正确的文字大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1965466/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com