【问题标题】:PIL image.open() working for some images but not othersPIL image.open() 适用于某些图像但不适用于其他图像
【发布时间】:2012-07-28 11:32:38
【问题描述】:

我定期使用 PIL 从 NOAA 打开 AREA 文件。在我收到的最后一批图像中, image.open() 命令根本不起作用。这是我编写的一个简单代码,它产生相同的结果。它将使用一个月前的文件而不是今天的文件打开、旋转和执行正常任务。

from PIL import Image
im = Image.open("path/to/file")
im.show()

这是错误:

File "image_goes.py", line 2, in <module>
im = Image.open("path/to/file")
File "/usr/lib/python2.6/dist-packages/PIL/Image.py", line 1980, in open
raise IOError("cannot identify image file")
IOError: cannot identify image file

这是我尝试过的:

  1. 在两台不同的机器上打开图像。
  2. 在出现权限问题时更改文件的文件夹
  3. 重新下载图像以及另外两个批次,均使用 FTP 手动和我们的自动脚本。

我的假设是我们的下载脚本存在问题并且它没有完全下载文件,但这个假设被拒绝了,因为新文件的大小正确并且我使用 FTP 手动下载了它们客户并得到了相同的结果。

我唯一的另一个理论是,今天的 NOAA 文件存在问题,或者它们已被更改为 PIL 无法再处理它们,但我认为这不太可能。

非常感谢任何帮助, 谢谢

【问题讨论】:

  • 您能否提供其中一张图片的链接,假设它已打开?
  • 你知道图片格式是不是一样的吗?您的 PIL 安装是否支持 JPG/PNG/TIFF 格式?
  • 图像是本地的,从 NOAA CLASS 网站下载。我没有理由相信文件格式不同,因为我们多年来一直使用相同的方法。

标签: python image python-imaging-library noaa


【解决方案1】:

可能是内容实际上并未同步到磁盘。试试Image.open(open("path/to/file", 'rb'))

【讨论】:

  • 我在使用 django-ckeditor 时遇到了同样的问题。新创建文件名后立即调用Image.open(filename) 导致:“IOError:无法识别图像文件”。但是后来我手动调用Image.openImage.open(filename),没有发生错误!于是我尝试把Image.open(filename)改成Image.open(open(filename, 'rb'))就OK了。
【解决方案2】:

对于

im = Image.open("path/to/file")

试试

im = Image.open(r"path/to/file")

即在路径字符串前放一个r。

【讨论】:

    【解决方案3】:

    您可以使用cv2 读取图片。

    im = cv2.imread(path)
    

    而且,对于打开/显示,您可以使用:

    cv2.imshow()
    

    【讨论】:

      猜你喜欢
      • 2014-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 2013-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多