在 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 图像

Python 3.x 中的 PIL ImageTk 等效项

Python打开图片失败

RLE8 图像支持/使用 Pillow 解压(PIL fork)

已安装包(Python PIL/Pillow)但我无法导入它

python,使用PIL库对图片进行操作