【问题标题】:In Python I can't open some png images properly using PIL在 Python 中,我无法使用 PIL 正确打开一些 png 图像
【发布时间】: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 开头。

标签: python python-3.x python-imaging-library png jpeg


【解决方案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 模块?它显示相同的东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多