imghdr / python - 无法检测某些图像的类型(图像扩展)

2023-11-22

我正在使用 Python 脚本从 imgur.com 下载大量图像,因为我拥有该格式的所有链接http://imgur.com/{id}我必须通过将原始网址替换为来强制下载它们http://i.imgur.com/{id}.gif,然后保存所有图像,不带扩展名。 (我知道有一个 Imgur 的 API,但我无法使用它,因为它对此类工作有限制)

现在下载图像后,我想使用 imghdr 模块来确定图像的原始扩展名:

>>> import imghdr
>>> imghdr.what('/images/GrEdc')
'gif'

问题是这个工作的成功率是80%,剩下的20%都被识别为'None'检查其中一些我发现它们很可能都是 .jpg 图像。

为什么 imghdr 无法检测到格式?即使没有扩展名,我也可以使用 Ubuntu 的默认图像查看器打开这些图像,所以我认为它们没有损坏。


请注意,2019 年,该错误尚未修复。该解决方案可通过 Paul R. 的链接获取。

解决该问题的一种方法是对问题进行猴子修补:

# Monkeypatch bug in imagehdr
from imghdr import tests

def test_jpeg1(h, f):
    """JPEG data in JFIF format"""
    if b'JFIF' in h[:23]:
        return 'jpeg'


JPEG_MARK = b'\xff\xd8\xff\xdb\x00C\x00\x08\x06\x06' \
            b'\x07\x06\x05\x08\x07\x07\x07\t\t\x08\n\x0c\x14\r\x0c\x0b\x0b\x0c\x19\x12\x13\x0f'

def test_jpeg2(h, f):
    """JPEG with small header"""
    if len(h) >= 32 and 67 == h[5] and h[:32] == JPEG_MARK:
        return 'jpeg'


def test_jpeg3(h, f):
    """JPEG data in JFIF or Exif format"""
    if h[6:10] in (b'JFIF', b'Exif') or h[:2] == b'\xff\xd8':
        return 'jpeg'

tests.append(test_jpeg1)
tests.append(test_jpeg2)
tests.append(test_jpeg3)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

imghdr / python - 无法检测某些图像的类型(图像扩展) 的相关文章

  • 如何生成给定范围内的回文数列表?

    假设范围是 1 X 120 这是我尝试过的 gt gt gt def isPalindrome s check if a number is a Palindrome s str s return s s 1 gt gt gt def ge
  • 如何在Windows上模拟socket.socketpair

    标准Python函数套接字 套接字对 https docs python org 3 library socket html socket socketpair不幸的是 它在 Windows 上不可用 从 Python 3 4 1 开始 我
  • SQL Alchemy 中的 NULL 安全不等式比较?

    目前 我知道如何表达 NULL 安全的唯一方法 SQL Alchemy 中的比较 其中与 NULL 条目的比较计算结果为 True 而不是 NULL 是 or field None field value 有没有办法在 SQL Alchem
  • 如何使使用 css 调整大小的图像在 IE 中看起来不错?

    当使用 css 宽度 高度或属性宽度 高度缩放图像时 IE6 和 IE7 无法很好地缩放网页中的图像 我不确定它默认使用哪种算法 但这不好 在这些浏览器中缩放时 缩放图像会显示锯齿伪影 幸运的是 有一种方法可以通过简单的 css 规则强制
  • __del__ 真的是析构函数吗?

    我主要用 C 做事情 其中 析构函数方法实际上是为了销毁所获取的资源 最近我开始使用python 这真的很有趣而且很棒 我开始了解到它有像java一样的GC 因此 没有过分强调对象所有权 构造和销毁 据我所知 init 方法对我来说在 py
  • 从 scikit-learn 导入 make_blobs [重复]

    这个问题在这里已经有答案了 我收到下一个警告 D Programming Python ML venv lib site packages sklearn utils deprecation py 77 DeprecationWarning
  • python pandas 中的双端队列

    我正在使用Python的deque 实现一个简单的循环缓冲区 from collections import deque import numpy as np test sequence np array range 100 2 resha
  • Python:字符串不会转换为浮点数[重复]

    这个问题在这里已经有答案了 我几个小时前写了这个程序 while True print What would you like me to double line raw input gt if line done break else f
  • 使用 OpenPyXL 迭代工作表和单元格,并使用包含的字符串更新单元格[重复]

    这个问题在这里已经有答案了 我想使用 OpenPyXL 来搜索工作簿 但我遇到了一些问题 希望有人可以帮助解决 以下是一些障碍 待办事项 我的工作表和单元格数量未知 我想搜索工作簿并将工作表名称放入数组中 我想循环遍历每个数组项并搜索包含特
  • ExpectedFailure 被计为错误而不是通过

    我在用着expectedFailure因为有一个我想记录的错误 我现在无法修复 但想将来再回来解决 我的理解expectedFailure是它会将测试计为通过 但在摘要中表示预期失败的数量为 x 类似于它如何处理跳过的 tets 但是 当我
  • 如何改变Python中特定打印字母的颜色?

    我正在尝试做一个简短的测验 并且想将错误答案显示为红色 欢迎来到我的测验 您想开始吗 是的 祝你好运 法国的首都是哪里 法国 随机答案不正确的答案 我正在尝试将其显示为红色 我的代码是 print Welcome to my Quiz be
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • 设置 torch.gather(...) 调用的结果

    我有一个形状为 n x m 的 2D pytorch 张量 我想使用索引列表来索引第二个维度 可以使用 torch gather 完成 然后然后还设置新值到索引的结果 Example data torch tensor 0 1 2 3 4
  • 如何从没有结尾的管道中读取 python 中的 stdin

    当管道来自 打开 时 不知道正确的名称 我无法从 python 中的标准输入或管道读取数据 文件 我有作为例子管道测试 py import sys import time k 0 try for line in sys stdin k k
  • 在 Pandas DataFrame Python 中添加新列[重复]

    这个问题在这里已经有答案了 例如 我在 Pandas 中有数据框 Col1 Col2 A 1 B 2 C 3 现在 如果我想再添加一个名为 Col3 的列 并且该值基于 Col2 式中 如果Col2 gt 1 则Col3为0 否则为1 所以
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL
  • 从 Python 中的类元信息对 __init__ 函数进行类型提示

    我想做的是复制什么SQLAlchemy确实 以其DeclarativeMeta班级 有了这段代码 from sqlalchemy import Column Integer String from sqlalchemy ext declar
  • 在 Python 类中动态定义实例字段

    我是 Python 新手 主要从事 Java 编程 我目前正在思考Python中的类是如何实例化的 我明白那个 init 就像Java中的构造函数 然而 有时 python 类没有 init 方法 在这种情况下我假设有一个默认构造函数 就像
  • JavaFX ImageView 未更新

    因此 我尝试将图像加载并保存到 imageView 中 其中图像的位置是通过文件浏览器选择的 我已经为此工作好几天了 如果我不能解决这个问题 我就会中风 我已经尝试了我能想到的一切 预先感谢您的帮助 UPDATED 这是我的主要课程 pub
  • 改变字典的哈希函数

    按照此question https stackoverflow com questions 37100390 towards understanding dictionaries 我们知道两个不同的字典 dict 1 and dict 2例

随机推荐

  • null 是一个对象吗?

    为空Object在Java中 如果 null 是一个对象 它将支持以下方法java lang Object例如equals 然而 情况并非如此 对 null 的任何方法调用都会导致NullPointerException 这就是Java语言
  • 将字节数组转换为 int 的更快方法

    有没有比更快的方法BitConverter ToInt32将字节数组转换为 int 值 我实际上尝试了几种不同的方法将四个字节转换为 int BitConverter ToInt32 new byte w x y z 0 BitConver
  • ffmpeg av libs 可以返回准确的 PTS 吗?

    我正在使用使用 IBBP GOP 序列的 mpeg 流 这 DTS PTS 前 4 个 AVPacket 返回的值如下 I 0 3 B 1 1 B 2 2 P 3 6 I 帧上的 PTS 看起来是合法的 但 B 帧上的 PTS 不可能是正确
  • Python错误:“NoneType”对象没有属性“find_all”

    我正在改编一个网络抓取程序 http danielfrg com blog 2013 04 01 nba scraping data disqus thread 将 ESPN 的棒球数据抓取到 CSV 中 但是 当我运行第二段代码来编写游戏
  • 带有符号链接的 mod_xsendfile

    我在 Rails 3 应用程序中使用 xsendfile 时遇到问题 我使用 capistrano 来管理部署 在每个版本中 都有一个指向共享 资产目录的符号链接 例如 var www site releases 1234 assets g
  • 部署应用程序引擎应用程序时如何处理敏感配置信息?

    示例 我有一个应用程序需要访问提供身份验证令牌的 API myApi MyApi token my private sensible token 我想避免在属于项目一部分的配置文件中包含该私有令牌 我想到的一个解决方案是在一个单独的代理应用
  • 当Java自动更新时更新Windows路径变量?

    这个问题询问如何在 Windows 中设置路径变量以包含 Java bin 目录 从而允许您在提示符下使用 javac 命令 针对此问题发布的解决方案指出您应该对最新 Java 安装的绝对路径进行硬编码 在这种情况下 它恰好是c progr
  • 如何在不同的包中使用两个同名的类? [复制]

    这个问题在这里已经有答案了 如何访问不同包中具有相同名称的两个类 foo bar myClass class and foo myClass class 所有这些都在同一个班级中 TestRunner Suite class SuiteTe
  • 使用 pgAdmin 进行远程 PostgreSQL 连接

    我正在尝试通过基于 Ubuntu 16 04 的服务器上运行的 PostgreSQL 建立远程连接 到目前为止 当我单击 pgAdmin 上的 保存 按钮时 它有点冻结 什么也不做 输入 manage py runserver My dro
  • 处理 BeautifulSoup CSS 选择器中的冒号

    输入 HTML div style display flex div class half style font size 6 width 33 apple div div class half style font size 6 text
  • iOS Swift,Enum CaseIterable 扩展

    我正在尝试为枚举编写一个扩展CaseIterable这样我就可以获得原始值的数组而不是案例 但我并不完全确定如何做到这一点 extension CaseIterable static var allValues String get ret
  • Parcelable 中的 Parcel 读/写操作时变量顺序是否重要?

    我有以下实现Parcelable class public class DemoModel implements Parcelable private String para1 private int para2 public DemoMo
  • 在 T-SQL 中使用环境变量

    如何在 T SQL 脚本中读取系统环境变量的值 这是在 SQL Server 2005 上运行 要 读取 T SQL 脚本中系统环境变量的值 您可以将 SQL Management Studio 设置为使用 sqlcmd 模式 然后你可以像
  • Shell脚本:如何删除目录中除文件中列出的文件之外的所有文件?

    我有一个目录 temp 包含许多文件和子目录 并且在某些目录中 可能还包含其他文件和子目录 另外 在目录 temp 它包含一个特殊的txt文件 名为kept txt 它列出了其中包含的一些直接文件和子目录 temp 现在我想删除下面的所有其
  • Rails 4 中的左外连接

    我有3个型号 class Student lt ActiveRecord Base has many student enrollments dependent destroy has many courses through studen
  • 自引用外键约束和删除

    在 SQL Server 中处理自引用外键约束的推荐方法是什么 桌子型号 fiData引用 tabData 中的先前记录 如果我删除引用的记录fiData 数据库抛出异常 DELETE 语句与 SAME TABLE REFERENCE 冲突
  • 在边框半径图像背景上添加边框渗透

    我在蓝色背景的图像上添加黑色边框 这样做时 似乎在边框内部添加了非常明显的背景彩色轮廓 有办法摆脱这个吗 我使用的代码很简单 border radius 100 border 3px solid rgb 0 0 0 您可以通过向任何图像添加
  • 如何让匿名用户编辑 Google Drive Realtime 文档?

    我想创建一个网页 使用Google 云端硬盘实时 API允许用户匿名编辑多个文本字段 由于可能有多个用户同时访问该页面 因此我想防止某人的编辑被另一个用户覆盖 而第一个编辑者不知道他的编辑已被覆盖 然而 从快速开始 似乎需要使用 Googl
  • 如何在pandas中按列表删除行[重复]

    这个问题在这里已经有答案了 现在我有数据框和列表 A B 1 a 2 b 3 c 4 d 5 e list a b c 我想通过 df B 引用列表来删除行 我想在下面 df A B 4 d 5 e 我怎样才能得到这个结果 您可以使用isi
  • imghdr / python - 无法检测某些图像的类型(图像扩展)

    我正在使用 Python 脚本从 imgur com 下载大量图像 因为我拥有该格式的所有链接http imgur com id 我必须通过将原始网址替换为来强制下载它们http i imgur com id gif 然后保存所有图像 不带