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'
您可能没有使用安装
Pillow
的 Python 版本。尝试在脚本开头添加此内容以查看您实际运行的是哪个 Python import sys; print(sys.executable, sys.version, *sys.path, sep="\n")
然后,在 IDE 之外,检查您安装的位置 Pillow
- Mark 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
。
#2楼
已采纳
得票数 2
textsize 已被弃用,正确的属性是 textlength,它为您提供文本的宽度。对于高度,请使用字体大小*您编写的文本行数。