上記記事経緯で、ページに埋め込んだFlickr写真のEXIF情報を自動で表示してくれるFlickrExという面白いツールを知ったのだけど、そのままでは2点ほど不都合があったので修正してみた。
目次
問題点
- ()を含むタグを拾えない問題
- 例えば、撮影時刻を示すDate and Time (Original)
- 写真によっては %Lens%ではレンズ名が拾えない問題
- 交換レンズ名がLensタグ以外(Lens ModelタグやLens Infoタグ)にのみ記録されている場合がある
- 例えば、Lightroom/PhotoshopでTIFF形式に変換して後加工を加えた場合にこのケースが発生する
とりあえずの解決策
オリジナルのソースコードはTypeScriptだったのだけど、書いたことがないのと、レポジトリ内のコード類を眺めてみた感じ、仮にTypeScriptで書いてもWindows環境下でそのままビルドできなさそうだったので、JavaScriptに変換された後のコードを書き換えた。
問題の原因は、Flickr APIで取得したExifデータの処理部分にあるので、それに該当するexifex.jsを書き換えた。
書き換えたコード
exifex.jsを改変し、exifexx.jsとした。コードはgist↓に置いています。
https://gist.github.com/dck-jp/888725bbb16498696ebea2a08118768e
書き換えた箇所とコードの概要
1つ目の問題に対しては、22行目の正規表現と56行目の正規表現(タグが存在しない場合の置換処理部分)を書き換えた。
2つ目の問題に対しては、26行目のforループ内にレンズ名を推定する処理を無理やり追加した。
「推定する」と書いたけど大した処理はしておらず、FLICKREX_EXIF_FORMATに%LensX%*1と記載してあれば、Lensタグ→Lens Modelタグ→Lens Infoタグの順で存在する値を拾うというだけ*2。
※ JavaScriptはふだん書かないのでいまいち作法がわからず…、とりあえずゴリ押しで解決してみた。
テスト
利用方法
基本はオリジナルの使い方と同様で、
最終行のexifex.min.js(exifex.jsをminifyしたコード)を呼出している箇所を、改変コードを呼び出すように書き換えた。
今回は改変コードを自分で借りているレンタルサーバ上に配置して呼び出した。
<script type="text/javascript"> var FLICKREX_EXIF_FORMAT = "%camera% + %lensX%; f=%Focal Length \(35mm format\)%(35mm判換算)<br>F%aperture%, %Exposure% sec, ISO %ISO Speed% / 撮影日時: %Date and Time \(Original\)%" ; var FLICKREX_EXIF_JQUERY_SELECTOR = "#content img"; </script> <script src="//flickrex.drikin.com/stable/vendor/jquery-1.9.0.min.js"> <script src="//flickrex.drikin.com/stable/flickrex.min.js"></script> <script src="//lovepenta.xyz/flickrexx/exifexx.js"></script>