【问题标题】:Get EXIF data without downloading whole image - Python在不下载整个图像的情况下获取 EXIF 数据 - Python
【发布时间】:2012-12-13 14:08:33
【问题描述】:

是否可以远程获取图片的EXIF信息,只需要下载EXIF数据?

据我对EXIF bytes in image files 的了解,EXIF 数据位于图像的前几个字节中。

所以问题是如何使用 Python 只下载远程文件的前几个字节? (编辑:依赖 HTTP Range Header 不够好,因为并非所有远程主机都支持它,在这种情况下会发生完整下载。)

例如,我可以在 x 字节的进度后取消下载吗?

【问题讨论】:

    标签: python image download client-server exif


    【解决方案1】:

    您可以通过设置HTTP range header 告诉网络服务器只向您发送文件的一部分。有关使用 urllib 部分下载文件的示例,请参阅 This answer。所以你可以下载一大块例如1000字节,检查exif数据是否包含在chunk中,如果找不到exif app1 header或者exif数据不完整,请下载更多。

    【讨论】:

    • 谢谢,但这取决于远程遵守范围标头,这还不够好。我在想,需要某种方式在 x 字节或类似字节后取消 curl。
    【解决方案2】:

    这在很大程度上取决于图像格式。例如,如果您有一个 TIFF 文件,则无法事先知道 EXIF 数据(如果有)在文件中的位置。它可能就在标题之后和第一个 IFD 之前,但这不太可能。它可能在图像数据之后。它可能在中间的某个地方。

    如果您需要 EXIF 信息,请将其提取到服务器(可能是缓存)上,然后将其打包发送出去,而不是要求客户端代码执行此操作。

    【讨论】:

    • 您的第二段假设他拥有存储图像的服务器,这可能不一定是这种情况:) 至于 EXIF 数据的位置,如果我理解 this answer 正确,在 JPG 文件中EXIF 数据将在文件的开头 - 你知道这是否正确吗?
    • 是的,我自己也有同样的疑惑。大多数图片都是 .jpg 格式,这样会很棒。
    • APP1 部分出现在 APP0 部分之后(如果存在)。根据规范,APP0 标记后面最多可以有 64K 的数据,因此您应该准备好处理它。并且可能有多个APP1部分。如果是我,并且我一心想要这样做,我会构建一个流解决方案,我可以在任何时候切断图像传输(在这种情况下,在我拥有 EXIF 之后,如果有的话)。
    • @plinth 您将如何构建这样的流解决方案? (即下载和切断图像交付部分。)
    猜你喜欢
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    相关资源
    最近更新 更多