0

我正在尝试阅读像这样的显微镜图像的 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 信息(如此所述):

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,但它也略微切断了图像描述字段。

任何提示将不胜感激。

4

3 回答 3

0

您正在查看的元数据可能是图像的 IPTC 元数据的一部分,而不是 EXIF。如果是这样,您将需要一个不同的 Python 模块来阅读它。查看“用于 python 的 Exif 操作库 [关闭]”以获取包含 IPTC 数据的建议。

于 2014-01-02T16:42:18.660 回答
0

这是在命令行上使用 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)
于 2014-01-02T17:16:39.383 回答
0

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

于 2015-04-21T20:42:19.400 回答