【问题标题】:Reading long exif tags in python在python中读取长exif标签
【发布时间】:2015-04-22 04:42:19
【问题描述】:

我正在尝试读取如下显微镜图像的 EXIF 信息: https://dl.dropboxusercontent.com/u/3816350/E3-9.tif

我对“图像描述”标签最感兴趣,因为它包含有关图像比例的信息。我已经使用 exifread 包成功加载了 EXIF 信息:

import exifread

f = open('E3-9.tif', 'rb')
exif_info = exifread.process_file(f)

for tag in exif_info.keys():
    print "Key: %s, value %s" % (tag, exif_info[tag])

但是,图像描述在输出中被截断,我无法弄清楚如何显示整个“图像图像描述”字段。知道我该怎么做吗?

顺便说一句,我尝试使用 PIL 使用以下代码读取 EXIF 信息(如 here 所述):

from PIL import Image
from PIL.ExifTags import TAGS

img = Image.open('E3-9.tif')
exif_data = img._getexif()

但我收到以下错误:

Traceback (most recent call last):
  File "/Users/..../2014-01-02 - Read scale from tif file.py", line 22, in <module>
    exif_data = img._getexif()
  File "/Users/danhickstein/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/PIL/Image.py", line 512, in __getattr__
    raise AttributeError(name)
AttributeError: _getexif

我也在命令行上尝试过 exiftool,但它也略微切断了图像描述字段。

任何提示将不胜感激。

【问题讨论】:

标签: python python-imaging-library exif exiftool


【解决方案1】:

您正在查看的元数据可能是图像的 IPTC 元数据的一部分,而不是 EXIF。如果是这样,您将需要一个不同的 Python 模块来阅读它。查看 "Exif manipulation library for python [closed]" 以获取包含 IPTC 数据的建议。

【讨论】:

  • 有道理。但似乎 exifread 可以访问该信息,我只是不知道如何让它显示整个字段。
  • 是的,我不确定,并澄清了我回答的语气。 (我在某种程度上基于 Photoshop 对文件的解释。)我还认为该文件可能已损坏。 php -r "var_dump(exif_read_data('E3-9.tif')['ImageDescription']);" 返回##fv3"m=2.091Philips CM100,甚至没有难以置信奇怪的变量类型。
  • 哈哈哈,创建文件的仪器看起来已经有 100 年的历史了,所以文件并不完美并不让我感到惊讶 :)。 ImageJ 正确显示信息为:Philips CM100 12/17/13 2:18:55 p 28500 51 100.0 Imaging XpixCal=2.091 YpixCal=2.091 Unit=nm ##fv3
【解决方案2】:

这是在命令行上使用 subprocess.check_output 调用 exiftool 的非常缓慢且低效的方法。不是我最好的时光,但它有效:

import matplotlib.pyplot as plt
import subprocess, glob, re

def get_magnification(filename):
    p = subprocess.check_output('exiftool -tab %s'%filename,shell=True) 

    xpix = float(re.findall('XpixCal=\d*.\d*',p)[0][8:])
    ypix = float(re.findall('YpixCal=\d*.\d*',p)[0][8:])

    mag = int(re.findall('p.\d+',p)[0][2:])

    return xpix,ypix,mag

xpix,ypix,mag = get_magnification('E3-9.tif')

print 'X pixels per nm: %.3f'%(xpix)
print 'Y pixels per nm: %.3f'%(ypix)
print 'Magnification:   %ix'%(mag)

【讨论】:

    【解决方案3】:

    您必须使用 exif_info[tag].values 来获取完整的 ImageDescription

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-29
      • 1970-01-01
      • 2014-03-29
      • 1970-01-01
      • 2011-06-13
      • 2020-04-22
      • 2015-07-19
      相关资源
      最近更新 更多