ImageFont IO错误:无法打开资源

时间:2015-11-05 12:44:37

标签: python io python-imaging-library

我是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)

7 个答案:

答案 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这样的相对路径不起作用。