我试图编写一个将文本放到图像上的程序,我试图让我的头围绕PIL并遇到错误:OSError:无法打开资源。这是我的第一个python程序,如果错误很明显,请道歉。
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
im = Image.open("example.jpg")
font_type = ImageFont.truetype("Arial.ttf", 18)
draw = ImageDraw.Draw(im)
draw.text(xy=(50, 50), text= "Text One", fill =(255,69,0), font = font_type)
im.show()
我收到错误:
Traceback (most recent call last):
File "C:\Users\laurence.maskell\Desktop\attempt.py", line 7, in <module>
font_type = ImageFont.truetype("Arial.ttf", 18)
File "C:\Python34\lib\site-packages\PIL\ImageFont.py", line 259, in truetype
return FreeTypeFont(font, size, index, encoding, layout_engine)
File "C:\Python34\lib\site-packages\PIL\ImageFont.py", line 143, in __init__
self.font = core.getfont(font, size, index, encoding,
layout_engine=layout_engine)
OSError: cannot open resource
答案 0 :(得分:4)
我在带有PIL 5.3.0的Windows 10 Pro上也遇到了这个问题。
在我的机器上,该错误是由非ASCII字体文件名引起的。如果将字体名称更改为仅包含ASCII字符,则可以打开字体而没有任何错误。
编辑:确实是a bug with ImageFont.truetype()
method,但尚未解决。
答案 1 :(得分:1)
from PIL import Image,ImageDraw,ImageFontim = Image.open("mak.png")
font_type = ImageFont.truetype("arial.ttf", 18)
draw = ImageDraw.Draw(im)
draw.text(xy=(120, 120), text= "download the font that you wanna use", fill =(255,69,0), font = font_type)
im.show()
其“ arial.ttf”不是“ Arial.ttf”
这是link to download arial.ttf字体。
答案 2 :(得分:0)
PIL无法找到指定的字体。检查它是否存在,并以完全相同的大小写命名。 您也可以尝试将其直接复制到项目文件夹中。
答案 3 :(得分:0)
它对我不起作用,因为未安装该字体。由于这里给出的答案,它现在可以工作了。安装可以完成here
答案 4 :(得分:0)
我通过使用default font 解决了问题。
ImageFont.load_default()
如果您只需要输入一些文字(字体样式对您来说并不重要),那么这可能是一个简单的解决方案。
font = ImageFont.load_default()
draw = ImageDraw.Draw(pil_img)
draw.text(( 20, 32), "text_string", (255,0,0), font=font)
答案 5 :(得分:0)
对于Linux,我使用了:
$ locate .ttf
/usr/share/fonts/truetype/ubuntu-font-family/Ubuntu-B.ttf
/usr/share/fonts/truetype/ubuntu-font-family/Ubuntu-BI.ttf
/usr/share/fonts/truetype/ubuntu-font-family/Ubuntu-C.ttf
/usr/share/fonts/truetype/ubuntu-font-family/Ubuntu-L.ttf
/usr/share/fonts/truetype/ubuntu-font-family/Ubuntu-LI.ttf
/usr/share/fonts/truetype/ubuntu-font-family/Ubuntu-M.ttf
/usr/share/fonts/truetype/ubuntu-font-family/Ubuntu-MI.ttf
/usr/share/fonts/truetype/ubuntu-font-family/Ubuntu-R.ttf
/usr/share/fonts/truetype/ubuntu-font-family/Ubuntu-RI.ttf
/usr/share/fonts/truetype/ubuntu-font-family/UbuntuMono-B.ttf
/usr/share/fonts/truetype/ubuntu-font-family/UbuntuMono-BI.ttf
/usr/share/fonts/truetype/ubuntu-font-family/UbuntuMono-R.ttf
/usr/share/fonts/truetype/ubuntu-font-family/UbuntuMono-RI.ttf
实际上返回的比这还多!
然后,我将此处发布的python代码放在Stack Overflow中:
插入locate
返回的字体名称“ Ubuntu-R.ttf”:
color_palette = [BLUE, GREEN, RED]
image_w=200
image_h=200
region = Rect(0, 0, image_w, image_h)
imgx, imgy = region.max.x+1, region.max.y+1
image = Image.new("RGB", (imgx, imgy), WHITE)
draw = ImageDraw.Draw(image)
vert_gradient(draw, region, gradient_color, color_palette)
#image.text((40, 80),"No Artwork",(255,255,255))
#font = ImageFont.truetype(r'C:\Users\System-Pc\Desktop\arial.ttf', 40)
#font = ImageFont.load_default()
font = ImageFont.truetype("Ubuntu-R.ttf", int(float(image_w) / 6))
draw.text((int(image_w/12), int(image_h / 2.5)), "No Artwork", \
fill=(0,0,0), font=font)
image.show()
瞧!现在,当我正在播放的音乐文件中没有图像要显示时,我将显示一个图像:
答案 6 :(得分:0)
我也面临着同样的问题。但后来发现这与斜杠有关。因此,如果其他人错过了这个小东西,那是给你的。
我在字体文件夹中有该字体。当我尝试使用 font /
答案 7 :(得分:0)
我认为您应该将字体移动到 fonts 或任何文件夹。我在heroku上遇到了同样的问题。在我将字体移动到字体目录后,它就可以工作了