クライアントで画像のexifを読み出すのに普段はblueimp-load-imageを使用しています。
画像をアップロードをするフォームの投稿日のデフォルト値を指定したりする時や、写真をトリミングするコンポーネントなどで利用しています。
自分がメンテナンスしているアプリケーションで古いバージョン2系を使用していたので、新しいバージョンの5系にアップグレードしました。
const options = { maxWidth: 600, orientation: true, meta: true, canvas: true // 1. オプションの追加 }; const photoEnableOrientation = document.getElementById('photoEnableOrientation'); photoEnableOrientation.addEventListener('change', (evt) => { loadImage(evt.target.files[0], options).then((result, meta) => { const exif = result.exif.get("Exif"); // 2. Exif IFDの読み出し const dateTimeOriginal = exif.get("DateTimeOriginal"); console.log(dateTimeOriginal); document.body.appendChild(result.image); }).catch(err => { console.log(err); }); });
主な変更点は下記の通りでした。
オプションの修正
古いバージョンだと、コールバック関数の引数がHTMLCanvasElementだったのが、オプションでcanvas: trueを指定しないと、デフォルトではHTMLImageElementになる。
また、Promiseだと結果オブジェクトになっていて、imageプロパティで参照できるようだ。
exifオブジェクトのインターフェース変更の修正
読み込み結果のオブジェクトにexifオブジェクトがあったが、参照キーが変わったようで撮影日時が取れなくなっていた。
DateTimeOriginal指定で参照できていたが、Exifキーを指定して、Exif IFD の結果に対して、DateTimeOriginalを指定する必要があった。
修正自体はそんなに大したことなかったです。