Image.open()无法识别图像文件 - Python?

Sib*_*ing 41 python python-imaging-library

我在Visual Studio 2013中运行Python 2.7.代码以前在Spyder中运行正常,但是当我运行时:

import numpy as np
import scipy as sp
import math as mt
import matplotlib.pyplot as plt
import Image
import random

# (0, 1) is N
SCALE = 2.2666 # the scale is chosen to be 1 m = 2.266666666 pixels
MIN_LENGTH = 150 # pixels

PROJECT_PATH = 'C:\\cimtrack_v1'
im = Image.open(PROJECT_PATH + '\\ST.jpg')
Run Code Online (Sandbox Code Playgroud)

我最终得到以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\cimtrack_v1\PythonApplication1\dr\trajgen.py", line 19, in <module>
    im = Image.open(PROJECT_PATH + '\\ST.jpg')
  File "C:\Python27\lib\site-packages\PIL\Image.py", line 2020, in open
    raise IOError("cannot identify image file")
IOError: cannot identify image file
Run Code Online (Sandbox Code Playgroud)

为什么会这样,我该如何解决?


正如所建议的,我已经将Pillow安装程序用于我的Python 2.7.但奇怪的是,我最终得到了这个:

>>> from PIL import Image
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named PIL


>>> from pil import Image
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named pil

>>> import PIL.Image
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named PIL.Image

>>> import PIL
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named PIL
Run Code Online (Sandbox Code Playgroud)

都失败了!

nao*_*oko 66

我有同样的问题.

from PIL import Image
Run Code Online (Sandbox Code Playgroud)

代替

import Image
Run Code Online (Sandbox Code Playgroud)

解决了这个问题

  • 不适合我...虽然我的问题是间歇性的,所以不确定是否有资格... (7认同)
  • 使用来自PIL import Image`的`PIL/ImageTk``.使用`import Image`创建两个Image模块实例,并且收集用于处理图像的插件`Image.ID`也是重复的.一个充满插件,其他空.您的代码使用空代码.更多信息请访问https://github.com/python-pillow/Pillow/pull/1898 (4认同)
  • 不知道为什么这个被低估了,但这对我也有用.我几乎没有尝试,因为它是-1. (2认同)
  • 当`img2pdf.py`突然无法再打开JPEG时,这对我有用。**谁能解释这个导入语句改变行为的原因?**我查了一下,`site-packages`下唯一的`Image.py`是`PIL`中的那个。我认为 `from ... import ...` 应该与 `import ...` 工作相同,除了它如何将结果对象放置在全局命名空间中——在这种情况下,它应该完全相同,不是吗? (2认同)
  • 这对我也有用。但就像 Evgeni 所说的那样,任何人都可以解释为什么这有效吗? (2认同)

mus*_*akc 15

所以在经历了这个问题很长一段时间之后,这可以帮助你:

from PIL import Image
Run Code Online (Sandbox Code Playgroud)

代替

import Image
Run Code Online (Sandbox Code Playgroud)

此外,如果您的图像文件未加载,并且您收到错误"没有文件或目录",那么您应该这样做:

path=r'C:\ABC\Users\Pictures\image.jpg'
Run Code Online (Sandbox Code Playgroud)

然后打开文件

image=Image.open(path)
Run Code Online (Sandbox Code Playgroud)

  • 我已经在执行“import PIL.Image as PILI”,但仍然遇到相同的错误。当我执行 `Path(path).exists()` 时,文件存在,因为打印结果为 true。我很难理解你建议我们做什么。你能澄清一下吗? (2认同)

pan*_*ish 8

就我而言……我的代码中已经有了“from PIL import Image”。

发生错误是因为我的代码中的先前操作仍在使用(锁定)图像文件。我不得不添加一个小的延迟或尝试在循环中以追加模式打开文件,直到没有失败。一旦没有失败,就意味着该文件不再被使用,我可以继续并让 PIL 打开该文件。这是我用来检查文件是否正在使用并等待它可用的函数。

def is_locked(filepath):
    locked = None
    file_object = None
    if os.path.exists(filepath):
        try:
            buffer_size = 8
            # Opening file in append mode and read the first 8 characters.
            file_object = open(filepath, 'a', buffer_size)
            if file_object:
                locked = False
        except IOError as message:
            locked = True
        finally:
            if file_object:
                file_object.close()
    return locked

def wait_for_file(filepath):
    wait_time = 1
    while is_locked(filepath):
        time.sleep(wait_time)
Run Code Online (Sandbox Code Playgroud)


iam*_*msk 6

首先,检查你的枕头版本

python -c 'import PIL; print PIL.PILLOW_VERSION'
Run Code Online (Sandbox Code Playgroud)

我使用pip install --upgrade pillow升级版本从2.7到2.9(或3.0)修复此问题.

  • 使用 `print(PIL.__version__)` 我有版本 `7.0.0`。该版本应该抛出错误吗? (3认同)

小智 6

就我而言,图像在下载过程中被损坏(使用 wget 和 github url)。

尝试使用来自不同来源的多个图像。

from PIL import Image 
Image.open() 
Run Code Online (Sandbox Code Playgroud)