Python Pillow/PIL 无法识别对象“imagedraw”的属性“textsize”

回答 2 浏览 3566 2023-09-04

我已经检查了我的环境(sublime text)上的python版本,它是最新的3.11.0,我检查了最新的pillow版本,它是10.0.0,我的代码看起来与网上的其他示例类似。

该代码有一部分是意大利语,但很容易理解。

问题出在“disegno.textsize(testo, font=font)

运行代码后:

line 14, in metti_testo_su_sfondo
    text_width, text_height = disegno.textsize(testo, font=font)
                              ^^^^^^^^^^^^^^^^
AttributeError: 'ImageDraw' object has no attribute 'textsize'

这很奇怪,因为 imagedraw 应该具有 textsize 属性。我是新手,希望没有漏掉什么


from PIL import Image, ImageDraw, ImageFont

def metti_testo_su_sfondo(testo, sfondo, posizione=(10, 10), colore_testo=(0, 0, 0), dimensione_font=25):
# Apri l'immagine dello sfondo
immagine_sfondo = Image.open(sfondo)


disegno = ImageDraw.Draw(immagine_sfondo)


font = ImageFont.truetype("ARIAL.TTF", dimensione_font)


text_width, text_height = disegno.textsize(testo, font=font)

# Calcola le coordinate del testo centrato
x = (immagine_sfondo.width - text_width) // 2
y = (immagine_sfondo.height - text_height) // 2


disegno.text((x, y), testo, fill=colore_testo, font=font)


immagine_sfondo.save("spotted.png")


testo_da_inserire = "Ciao, mondo!"
sfondo_da_utilizzare = "spotted_bianco.jpg" 

metti_testo_su_sfondo(testo_da_inserire, sfondo_da_utilizzare)

目标是一个代码,可以自动生成图像,而无需手动编辑它们。我检查了构建系统、Python 版本和 Pillow 版本。当我通过 cmd 运行代码时,它给了我这个错误:

from PIL import Image, ImageDraw, ImageFont
ModuleNotFoundError: No module named 'PIL'
carokann17 提问于2023-09-04
您可能没有使用安装 Pillow 的 Python 版本。尝试在脚本开头添加此内容以查看您实际运行的是哪个 Python import sys; print(sys.executable, sys.version, *sys.path, sep="\n") 然后,在 IDE 之外,检查您安装的位置 PillowMark Setchell 2023-09-04
谢谢Mark,但不幸的是我认为我没有解决任何问题。 C:\Python311\python.exe 3.11.0 (main, Oct 24 2022, 18:26:48) [MSC v.1933 64 bit (AMD64)] C:\Users\user\Desktop\text files\spotted C:\Python311\python311.zip C:\Python311\Lib C:\Python311\DLLs C:\Python311 C:\Python311\Lib\site-packages C:\Python311\Lib\site-packages\vboxapi-1.0-py3.11.egg python 似乎是正确的版本,我还在 python311\lib\site-packages C:\Python311\Lib\site-packages\Pillow-10.0.0.dist-info 安装pillow的同一天更新了我的构建系统carokann17 2023-09-05
我想我会尝试卸载并重新安装pillow,然后尝试使用虚拟机carokann17 2023-09-05
我还尝试在另一个代码中使用 textsize 属性,只是为了确保从 PIL import Image, ImageDraw, ImageFont b = Image.open("spotted_bianco.jpg") a = ImageDraw.Draw(b) c, d = a.textsize( "e", font="ARIAL.TTF") 我尝试运行它 c, d = a.textsize("e", font="ARIAL.TTF") ^^^^^^^^^^^ AttributeError: 'ImageDraw' object has no attribute 'textsize' [Finished in 161ms] 并且 ofc 它不起作用carokann17 2023-09-05
我解决了。我决定在 Kali 虚拟机上运行它,它告诉我在 7 天前发布的最新版本 Pillow 10 中,textsize 将被弃用。我会修复我的代码,谢谢你帮助我。carokann17 2023-09-08
2 个回答
#1楼
得票数 3

它不再被称为textsize,而是被称为textlength

Tim Roberts 提问于2023-09-08
#2楼 已采纳
得票数 2

textsize 已被弃用,正确的属性是 textlength,它为您提供文本的宽度。对于高度,请使用字体大小*您编写的文本行数。

carokann17 提问于2023-09-09