はてなブログ + Google Photos (というか Lightroom Classic の現像のカスタムファイル名) で、写真の exif を表示する
Google Photos のオリジナルデータには exif の情報が入っているので、こいつを exif-js でパースして表示、と思ったけどそもそも CORS 的に無理だった。
なので割と力業で表示させてみた。こんな感じで exif を表示してる。
やり方
Lightroom Classic のファイル書き出しで、カスタムファイル名にゴリっと必要そうな exif をいれちゃう。これでファイル名が長い jpg ファイルができあがる。なお私の環境だと、カスタムファイル名でカスタムテキストや、テンプレート以外の文字列を埋め込むと、高確率で Lightroom が落ちたり、意図したファイル名にならなかったりした。
少なくとも、Windows 環境(NTFS) + Windows の Google バックアップと同期 だと、意図したファイル名で Google Photos にアップロードされる。
はてなブログ側は、このファイル名を読み取って適当に HTML に挿入する JS をフッタなどに埋め込む。これで、このエントリーのような表示になる。力業で全然美しい方法では無い…。
document.addEventListener('DOMContentLoaded', function() {
jQuery('img.magnifiable').each(function(_, e) {
var filename = e.src.replace(/.*\//, '').replace(/\.*/, '');
// YYYYMMDD__exif1__exif2__exif3 な lightroom から出力したファイル名。カスタムテキストは __ をセットしてセパレータに。
var regexp = /^\d{8}__(.*)\.[^.]+$/;
var matches = filename.match(regexp)
if (matches) {
var exif = decodeURI(decodeURIComponent(matches[1]))
.replace(/__/g, ', ')
.replace(/\+/g, ' ')
.replace(/1-(\d+)\s/, '1/$1')
.replace(' mm,', 'mm,')
.replace(/ ISO (\d+)/, ' ISO$1')
.replace(/\s\(f\s-\s(.+?)\)/, ', F$1');
var exifElement = jQuery('<div/>', {
text: exif,
style: 'text-align: right; color: #AAAAAA; font-size: 80%; margin: -5px 5px 0 0;'
});
jQuery(e).parent().parent().append(exifElement);
}
});
});