【问题标题】:ImageFont IO error: cannot open resourceImageFont IO 错误:无法打开资源
【发布时间】:2015-11-05 12:44:36
【问题描述】:

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

【问题讨论】:

  • 你能发送错误堆栈吗?
  • 我生成了一个可能匹配的:pastebin.com/C92Re7iQ。看起来像 Coval.otf 没有被发现?还发现此资源可能会提供更多信息:tiny.cc/1voo5x。看来必须安装了。这本书显示了一个下载链接。

标签: python io python-imaging-library


【解决方案1】:

这是因为Coval.otf无法读取,可能是因为它在您的系统上不存在,这是在ImageFont doc中指定的。 我尝试搜索特定字体,但找不到获取它的方法。如果您必须使用Coval 字体,请查看@NewYork167 的link。

无论哪种方式,为了省去安装字体的麻烦,您可以将调用更改为系统上存在的字体,使用文档的example 中指定的字体:

font = ImageFont.truetype("arial.ttf", 15)

【讨论】:

  • 对于 Mac,对我有用的是 myfont = ImageFont.truetype('/Library/Fonts/Arial.ttf', 15) 。在我的情况下需要指定字体文件路径。
  • 在 Ubuntu 上怎么样?
【解决方案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)

效果很好。

【讨论】:

    【解决方案3】:

    在我的情况下(Centos,Python 3.6.6),字体需要绝对路径,例如:

    ttfont = ImageFont.truetype('/root/pyscripts/arial.ttf',35)
    

    ~/pyscripts/arial.ttf 这样的相对路径不起作用。

    【讨论】:

    • 也发生在 WSL2 中
    【解决方案4】:

    如果您使用的是 colab,那么您必须正确提供路径,仅编写 arial.ttf 是不够的。 如果该字体类型在 colab 上可用,则获取路径: !fc-list 或 !fc-list | grep "" 然后你可以添加整个路径。enter image description here

    【讨论】:

      【解决方案5】:

      我还发现,对于 Anaconda3 2019.03,truetype 字体变量区分大小写。我使用的是 Windows 10,必须查看 C:\Windows\Fonts。查看属性,我在资源管理器中看到“Arial.ttf”字体为“arial.ttf”。

      ImageFont.truetype('arial.ttf') 工作时 ImageFont.truetype('Arial.ttf') 抛出“无法打开资源”错误。

      烦人的变化,但对我有用。

      【讨论】:

        【解决方案6】:

        Windows 上 PIL 的字体文件区分大小写。 转到 Windows/字体:

        有些字体是 *.tff

        其他是 *.TFF

        您必须使用实际的文件名,而不是 Windows 从控制面板显示的字体标题。

        【讨论】:

        • 此外,大多数字体名称只有 8 个字符长,所以如果您有类似wingdings2 之类的东西 - 首先检查,因为字体名称是 WINGDNG2.TTF - 没有 I,没有 S,所有内容都使用大写字母
        【解决方案7】:

        看起来你可以从这里安装 Coval,这样你就不必在以后的代码中更改字体了 https://fontlibrary.org/en/font/bretan

        【讨论】:

          猜你喜欢
          • 2018-08-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多