【问题标题】:Fatal error reading PNG image file: Not a PNG file in Ubuntu 20.04 LTS读取 PNG 图像文件的致命错误:在 Ubuntu 20.04 LTS 中不是 PNG 文件
【发布时间】:2020-11-05 16:48:28
【问题描述】:

我尝试使用 python 中的requests 模块下载图像。它可以工作,但是当我尝试打开此图像时,它显示“读取 PNG 图像文件的致命错误:不是 PNG 文件”。 Here是我的错误截图。而我之前下载的代码是,

import requests

img_url = "http://dimik.pub/wp-content/uploads/2020/02/javaWeb.jpg"

r = requests.get(img_url)

with open("java_book.png","wb") as f:
    f.write(r.content)

我在终端中运行我的代码只是说,python3 s.py(s.py 是文件名)。 我的代码有问题还是操作系统有其他问题(ubuntu 20.04 LTS)?

【问题讨论】:

  • 链接返回404。
  • 链接在这里运行良好。Here 是屏幕截图。
  • 我正在从该链接获取网页。您确定您有指向该特定图像的特定链接吗?
  • 那个 URL 有点奇怪。它工作了一次,然后停止工作。
  • @mpen 同意。因为如果我使用另一个 URL,它可以使用相同的代码正常工作。Here 是我的代码。实际上我正在学习网络爬虫,我制作了一个程序来收集来自特定 a 的所有图像网页,它运行良好,但是当我尝试打开图像时,都显示错误。Here 它是。

标签: python python-3.x python-requests fatal-error ubuntu-20.04


【解决方案1】:

这是因为您尝试将javaWeb.jpg(一个JPG 文件)保存为java_book.png(一个PNG 文件)。

【讨论】:

  • 不是。如果我更改此设置,则会显示新错误error interpreting jpeg image file (not a jpeg file starts with 0x3c 0x21)Here 是截图。
  • 因为在r.content 中出于某种原因有HTML。我刚试了一下。
  • This 是我得到的r.content
  • 您的操作系统没有问题。首先你得到一个错误,因为图像是 JPEG 文件。而现在是因为r.content中有HTML。
  • 哦,我明白了。有什么办法可以解决这个问题吗?
【解决方案2】:

为了查看我们正在解决的问题,我尝试复制该问题,请查看以下发现的内容。

1.) 您尝试打开的文件是整个 HTML 文档。我可以支持这一点,因为我们在您的 'wb' 或 WRITE BINARY 命令的开头找到了 !DOCTYPE html。

从这里我们有几个选项来解决我们的问题。

a.) 我们可以简单地从网页下载图像 - 将其放置在本地文件夹/目录/或您想要的任何位置。这是迄今为止我们最简单的调用,因为它允许我们稍后调用并打开它,而无需做太多事情。当我在 Windows 机器上时 - Ubuntu 也应该没有问题(除非你不在带有 GUI 的 UBUNTU 中 - 可以用 startx IF SUPPORTED 修复)

b.)如果您必须直接从网站本身提取,您可以使用此答案here 中的 BEAUTIFULSOUP 尝试类似的操作。老实说,我从来没有真正使用过后者,因为下载和移动更有效。

【讨论】:

    【解决方案3】:

    您只需要将图片保存为JPG

    import requests
    
    img_url = "http://dimik.pub/wp-content/uploads/2020/02/javaWeb.jpg"
    
    r = requests.get(img_url)
    
    with open("java_book.jpg","wb") as f:
        f.write(r.content)
    

    【讨论】:

      【解决方案4】:

      是的,这是一个完整的 HTML 文档:

      【讨论】:

        【解决方案5】:
        import requests
        
        response = requests.get("https://devnote.in/wp-content/uploads/2020/04/devnote.png")
        
        file = open("sample_image.png", "wb")
        file.write(response.content)
        print (response.content)
        file.close()
        

        https://devnote.in/wp-content/uploads/2020/04/devnote.png这个网址是禁用mod_security。所以这个返回错误像: <html><head><title>Not Acceptable!</title></head><body><h1>Not Acceptable!</h1><p>An appropriate representation of the requested resource could not be found on this server. This error was generated by Mod_Security.</p></body></html>.

        在 apache 服务器上使用 .htaccess 禁用 mod_security

        Mod_security 可以在 .htaccess 的帮助下轻松禁用。

        <IfModule mod_security.c>
          SecFilterEngine Off
          SecFilterScanPOST Off
        </IfModule>
        

        【讨论】:

          猜你喜欢
          • 2018-10-08
          • 1970-01-01
          • 2015-12-31
          • 1970-01-01
          • 2016-02-24
          • 1970-01-01
          • 2015-12-11
          • 2014-03-30
          • 2012-05-13
          相关资源
          最近更新 更多