黙々とC#

"In a mad world of VBA, only the mad are sane" 『VBAという名の狂った世界で狂っているというのなら私の気は確かだ』

FlickrExで()付きのタグが拾えない問題+αを解決してみた

高千穂高原

yogguit.hatenablog.com

上記記事経緯で、ページに埋め込んだ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>

利用例

IMGP9985-HDR.jpg

cat at night

Hydrangea macrophylla

IMGP7340.jpg

*1:大文字小文字は無視。オリジナルの仕様に準拠。

*2:実用上はこれで問題ないはず。たぶん。おそらく。