不具合か? exifread

目次

ImageMagickのconvertをしたファイルで...

せっかくmakernoteでlens情報が取れるようになったのに、convertしたファイルでは狂ってしまいます。たとえば、

adachi@fumita:/media/adachi/S1T/python3$ python3 withExifread05.py img2/DSC_1874.JPG 
withExifread05.py
img2/DSC_1874.JPG
EXIF DateTimeOriginal 2020/05/03 16:58:13
Image Orientation 8 : Rotated 90 CCW
MakerNote LensMinMaxFocalMaxAperture [40, 40, 14/5, 14/5]
(file) img2/DSC_1874.JPG
(date) 2020/05/03 16:58:13
(titl) *1/8s f3 iso:400 60mm(40mm) 5568px NIKON D500
(lens) *40mm f2.8
(GPS ) *
(orie) 8

ここで、[40, 40, 14/5, 14/5]は'MakerNote LensMinMaxFocalMaxAperture'タグの値そのままです。40mm f2.8はそれを元にした処理で出したものです。

これをconvertします。

adachi@fumita:/media/adachi/S1T/python3$ convert img2/DSC_1874.JPG -resize 960x960 -auto-orient img2/tmp00.jpg

もう一度値を求めます。

adachi@fumita:/media/adachi/S1T/python3$ python3 withExifread05.py img2/tmp00.jpg
withExifread05.py
img2/tmp00.jpg
Possibly corrupted field NoiseReduction in MakerNote IFD
EXIF DateTimeOriginal 2020/05/03 16:58:13
Image Orientation 1 : Horizontal (normal)
MakerNote LensMinMaxFocalMaxAperture [5/14, 5/6424, 1614166323/4033470734, 22402493/1114438292]
22402493/1114438292
(file) img2/tmp00.jpg
(date) 2020/05/03 16:58:13
(titl) *1/8s f3 iso:400 60mm(40mm) 5568px NIKON D500
(lens) *0.4-0.0mm f0.4-0.0
(GPS ) *
(orie) 1

convertは信頼の置ける老舗のソフトウェアですし、Eye of GNOME という GNOME デスクトップの公式画像ビューアーで見ると、正常です。

EoGでは正常

その後

Orientation情報に従って画像を回転させたときに、それを1にリセットして保存しないと厄介なことになります。この点からexifデータの内容の変更と保存を視野に、調べていくと、piexifに出会います。このライブラリはMakerNoteはバイト列のままなのでレンズ情報は得られません。あくまで回転させてそのOrientationのデータだけ変更して書き戻すということになります。

書き戻すときにはPILのsaveでexifデータを指定して行います。しかし、これはconvertを外部プロセスで実行させるほうが得策という結論になりました。

さらに、Eye of GNOME ではNikonのD500でもD300sでもレンズ情報が取れているので、exifreadよりも進んでいます。GNOMEでは使えるライブラリがあるだろうと探して、gexiv2のライブラリを発見します。

exiv2はpython2用ということだったので、その先を調べていなかったのですが、gexiv2となってpyhton3からも使えるようになっていました。ですから、exifreadの不具合もこれ以上追求しないことにします。