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])

ただし、出力でイメージの説明が切り取られており、「イメージ ImageDescription」フィールド全体を表示する方法がわかりません。どうすればこれを行うことができますか?

ところで、私は 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

これは、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 ではなく、画像の IPTC メタデータの一部である可能性があります。その場合、それを読み取るには別の Python モジュールが必要になります。IPTC データを含む推奨事項については、「Python の Exif 操作ライブラリ [終了]」を参照してください。

于 2014-01-02T16:42:18.660 に答える
0

完全な ImageDescription を取得するには、exif_info[tag].values を使用する必要があります。

于 2015-04-21T20:42:19.400 に答える