我尝试使用PIL.Image
打开图像,但遇到此错误:
Python 3.11.4 (tags/v3.11.4:d2340ef, Jun 7 2023, 05:45:37) [MSC v.1934 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.listdir(".")
['Characters', 'Creatures', 'processing.ipynb']
>>> picpath = os.path.join("Characters", "4sprite", "Female_Archer", "Archer_Base", "Sprite_1.png")
>>> os.path.exists(picpath)
True
>>> from PIL import Image
>>> img = Image.open(picpath)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\Alex\AppData\Local\Programs\Python\Python311\Lib\site-packages\PIL\Image.py", line 3305, in open
raise UnidentifiedImageError(msg)
PIL.UnidentifiedImageError: cannot identify image file 'Characters\\4sprite\\Female_Archer\\Archer_Base\\Sprite_1.png'
字符串
我现在最好的猜测是,它与PIL
在Windows上处理路径的方式有关,因为os.path.exists
会找到该文件(我已经手动验证了文件存在,可以打开和查看).我注意到路径有双反斜杠,但我发现的resources说,这是规范的表示.我看到有人遇到了similar problem,但不幸的是,他们的解决方案是使用PIL.Image.open
(这就是我抛出错误的原因)。
有没有其他人遇到过这种情况,并在周围工作?
问:Sprite_1.png是什么类型的图像(编码,通道数和大小)?它实际上是一个有效格式的PNG吗?你能给我们看前一百个字节吗?-Brian 61354270
答:
with open(os.path.join("Characters", "4sprite", "Female_Archer", "Archer_Base", "Sprite_1.png"), "rb") as f:
first_100 = f.read(100)
print(first_100)
型
给出b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x0f\x00\x00\x00\x0f\xa0\x08\x06\x00\x00\x00G'\xe9\xd3\x00\x00a.zTXtRaw profile type exif\x00\x00x\xda\xac\xbdY\x92\xc48\xb6m\xf7\xcfQ\xbc!\x10=8\x1c\x00$\xcc4\x03\r_k\xc1#\xab\xea\xdew%3\xc9"
1条答案
按热度按时间ssm49v7z1#
似乎有几种可能性:
共享文件,使用Dropbox/Github/Google Drive或其他不会更改文件的服务会有所帮助。
要检查第一种可能性,您可以自己读取文件并将其传递给PIL,这样PIL就不必处理您的路径。这将像这样:
字符串
如果这样做有效,这意味着PIL可以理解文件内容,但不能通过您的路径访问它们。如果不起作用,则文件内容有问题,您需要共享它。
另一种可能更简单的方法来测试路径是否是问题所在,就是简单地将图像移动到程序运行的目录中。
一种测试图像内容是否是问题所在的方法,与路径相反,是在原始路径上放置一个简单的2x2像素黑色PNG图像,以代替您的 “不满意” 图像。