我是Python新手并尝试运行以下代码。我收到了以下错误"IOError: cannot open resource"
。这是因为某些图像特征不再存在(例如Coval.otf),还是由于写入/读取限制?请让我知道 - 非常感谢,W
import numpy as np
from PIL import Image, ImageDraw, ImageFont
from skimage import transform as tf
def create_captcha(text, shear=0, size=(100,24)):
im = Image.new("L", size, "black")
draw = ImageDraw.Draw(im)
font = ImageFont.truetype(r"Coval.otf", 22)
draw.text((2, 2), text, fill=1, font=font)
image = np.array(im)
affine_tf = tf.AffineTransform(shear=shear)
image = tf.warp(image, affine_tf)
return image / image.max()
%matplotlib inline
from matplotlib import pyplot as plt
image = create_captcha("GENE", shear=0.5)
答案 0 :(得分:13)
这是因为无法读取Coval.otf
,可能是因为它在您的系统上不存在,这在ImageFont doc
中指定。 我试图搜索特定的字体,却发现无法查询。如果必须使用Coval
字体,请查看@ NewYork167的link。
无论哪种方式,为了省去安装字体的麻烦,您只需将调用更改为系统中存在的字体,使用文档example中指定的字体:
font = ImageFont.truetype("arial.ttf", 15)
答案 1 :(得分:2)
运行以下命令后对我来说:
conda install -c conda-forge graphviz
conda install -c conda-forge python-graphviz
,然后通过以下方式在Mac上链接字体:
img = Image.open("tree1.png")
draw = ImageDraw.Draw(img)
font = ImageFont.truetype('/Library/Fonts/Arial.ttf', 15)
效果很好。
答案 2 :(得分:1)
看起来您可以从此处安装Coval,以免您在将来的代码中更改字体 https://fontlibrary.org/en/font/bretan
答案 3 :(得分:1)
Windows上PIL的字体文件区分大小写。 转到Windows /字体:
某些字体是* .tff
其他为* .TFF
您必须使用实际的文件名,而不要使用Windows从控制面板显示的字体标题。
答案 4 :(得分:1)
我还发现对于Anaconda3 2019.03,truetype字体var区分大小写。我使用的是Windows 10,必须查看C:\ Windows \ Fonts。通过查看属性,我发现资源管理器中的“ Arial.ttf”字体为“ arial.ttf”。
ImageFont.truetype('arial.ttf')在 ImageFont.truetype('Arial.ttf')引发“无法打开资源”错误。
烦人的变化,但对我有用。
答案 5 :(得分:0)
如果您使用的是colab,则仅写arial.ttf是不够的,因此您必须正确提供路径。 要获取路径(如果该字体类型在colab上可用): !fc-list 或!fc-list | grep“” 然后您可以添加整个路径。enter image description here
答案 6 :(得分:0)
就我而言(Centos,Python 3.6.6),字体需要绝对路径,例如:
ttfont = ImageFont.truetype('/root/pyscripts/arial.ttf',35)
像~/pyscripts/arial.ttf
这样的相对路径不起作用。