在 Python 中,我无法使用 PIL 正确打开一些 png 图像
Posted
技术标签:
【中文标题】在 Python 中,我无法使用 PIL 正确打开一些 png 图像【英文标题】:In Python I can't open some png images properly using PIL 【发布时间】:2021-05-28 01:48:09 【问题描述】:我有两个 png 图片,如果我尝试打开它们(这里是代码)
from PIL import Image
x = Image.open('png/x-tictactoe.png')
o = Image.open('png/o-tictactoe.png')
print(x)
print(o)
第一行正常打开图片为png,第二行自动打开图片为jpeg
这是输出:
"C:\Users\Delfino De Chicchis\PycharmProjects\TicTacToe\venv\Scripts\python.exe" "C:/Users/Delfino De Chicchis/PycharmProjects/TicTacToe/test.py"
<PIL.PngImagePlugin.PngImageFile image mode=RGBA size=860x898 at 0x27FA46330A0>
<PIL.JpegImagePlugin.JpegImageFile image mode=L size=880x1004 at 0x27FA67E8C10>
Process finished with exit code 0
我只想将两个文件都打开为 png,以便使用 RGBA 制作透明背景。
有人可以帮帮我吗?
【问题讨论】:
您确定这两个文件都是 png 文件,而不仅仅是一个带有 png 扩展名的 jpeg 文件吗?如果您使用的是 linux 或 mac,请尝试file imagename.png
并查看响应是什么
我在 Windows 上,但我检查了属性,它显示文件 PNG(.png)
尝试在此处上传您的 "unhappy" 文件并检查前几个字节hexed.it
好的,我做了,但不知道应该看什么。
PNG 文件将以89 50 4e 47 0d 0a 1a 0a
开头。 JPEG 将以 ff d8 ff
开头。
【参考方案1】:
文件的扩展名不一定是其内容的正确指标 - 它只是一个 Windows 概念。大多数文件的开头都有recognisable“幻数”,或“签名”。
所以,如果您没有本地安装的 hex 工具,请尝试将 "unhappy" PNG 文件的内容转储为十六进制,或者在在线十六进制编辑器(如 hexedit)中打开它.
对于 PNG,您应该会看到一个有效的 PNG signature,如下所示:
89 50 4e 47 0d 0a 1a 0a ... (in ASCII 50="P", 4e="N", 47="G")
对于 JPEG,您应该会看到一个有效的 JPEG signature,如下所示:
ff d8 ff ...
【讨论】:
【参考方案2】:使用此display(x) and display(o)
如果不起作用,请检查目录。
【讨论】:
正常打开图片 转到文件右键单击属性。转到生成并检查图像的位置。 他们有正确的路径,确实我可以正常使用两者但不能改变 jpeg 的透明度 使用 :display( x ) 代替: print( x ) 来自 IPython 模块?它显示相同的东西以上是关于在 Python 中,我无法使用 PIL 正确打开一些 png 图像的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Canvas 上的 Tkinter 中打开 PIL 图像
RLE8 图像支持/使用 Pillow 解压(PIL fork)