せっかく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 デスクトップの公式画像ビューアーで見ると、正常です。
Orientation情報に従って画像を回転させたときに、それを1にリセットして保存しないと厄介なことになります。この点からexifデータの内容の変更と保存を視野に、調べていくと、piexifに出会います。このライブラリはMakerNoteはバイト列のままなのでレンズ情報は得られません。あくまで回転させてそのOrientationのデータだけ変更して書き戻すということになります。
書き戻すときにはPILのsaveでexifデータを指定して行います。しかし、これはconvertを外部プロセスで実行させるほうが得策という結論になりました。
さらに、Eye of GNOME ではNikonのD500でもD300sでもレンズ情報が取れているので、exifreadよりも進んでいます。GNOMEでは使えるライブラリがあるだろうと探して、gexiv2のライブラリを発見します。
exiv2はpython2用ということだったので、その先を調べていなかったのですが、gexiv2となってpyhton3からも使えるようになっていました。ですから、exifreadの不具合もこれ以上追求しないことにします。