簡體   English   中英

嘗試讀取圖像元數據時,Python XMP Toolkit過於嚴格(“無法識別的TIFF前綴”)

[英]Python XMP Toolkit is too strict (“Unrecognized TIFF prefix”) when trying to read image metadata

我正在嘗試使用Python XMP Toolkit從JPG中的JPG讀取XMP數據。 但是,我遇到了幾張圖像,其中該庫無法加載任何XMP數據:

>>> from libxmp.utils import file_to_dict
>>> file_to_dict("/path/to/file.jpg")
Unrecognized TIFF prefix
{}

如果嘗試使用Pillow提取圖像元數據,則會收到類似的錯誤:

>>> from PIL import Image
>>> Image.open(file_path)._getexif()
  File "<string>", line unknown
SyntaxError: not a TIFF IFD

這些圖像在瀏覽器中正確顯示,在文件上運行PIL的verify()方法不會引發任何異常,如果以文本形式打開圖像,則可以看到看起來正確的格式的圖像元數據。 最后, PHP中的 exif_read_data 函數 (顯然不太靈活)可以讀取這些圖像的所有元數據,而不會出現問題。

是否有辦法(1)修復映像,使其不再具有錯誤的'TIFF前綴',或(2)在嘗試讀取XMP元數據時告訴Pillow或libxmp不太嚴格?

這似乎並不完全理想,但是我找到了一個對我來說可能“足夠好”的解決方案。 這是一些受此問題答案啟發的代碼。

import libxmp

def parse_xmp(path):
    data = libxmp.utils.file_to_dict(path)
    if not data:
        data = dirty_parse_xmp(path)
    return data


def dirty_parse_xmp(path):

    # Find the XMP data in the file
    xmp_data = ''
    xmp_started = False
    with open(path) as infile:
        for line in infile:
            if not xmp_started:
                xmp_started = '<x:xmpmeta' in line
            if xmp_started:
                xmp_data += line
                if line.find('</x:xmpmeta') > -1:
                    break
        else:  # if XMP data is not found
            return {}
    xmp_open_tag = xmp_data.find('<x:xmpmeta')
    xmp_close_tag = xmp_data.find('</x:xmpmeta>')
    xmp_str = xmp_data[xmp_open_tag:xmp_close_tag + 12]

    # Pass just the XMP data to libxmp as a string
    meta = libxmp.XMPMeta()
    meta.parse_from_str(xmp_str)
    return libxmp.utils.object_to_dict(meta)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM