備忘録、そしてマニアックネタとなります。

Adobe Lightroomの書き出し設定では、リサイズやウォーターマーク(画像透かし)を手軽に設定できるのですが、その反面で自由度が少ないのがデメリットです。

develop or drink ?
 develop or drink ? ©

そこで今回は、色んなサイズの画像を一括で書き出したり、画像に応じてウォーターマーク配置箇所を柔軟に選択できる処理を書いてみました。

github
tea3/resize-and-watermark
Batch image resizing and adding watermark for node.js

今まではPhotoshopスクリプトとドロップレットの組み合わせで、上記の処理を行っていたんですが、毎度Photoshopを立ち上げるのが面倒になってきたので、Node.jsに移行してみました。

目次

何ができるのか

Lightroomの後処理でリサイズやウォーターマークを追加します。できる機能の概要をまとめると、次の通りです。

  • 写真の一括リサイズ

    予め設定しておいた数種類の長辺ピクセルに応じてリサイズ画像を作ってくれます。

  • ウォーターマークの配置

    コピーライトなどの画像透かしをリサイズ後に配置できます。

  • ウォーターマークの配置位置カスタマイズ

    配置位置はLightroomのキーワードから変更することが可能です。写真一枚一枚に応じて配置位置を好きなように調整できます。

  • ウォーターマークの色を自動選択

    ウォーターマークのカラーをautoに設定しておくと、写真の中に含まれる色を参考に、透かし画像をカラーオーバーレイ(色を被らせる)します。

  • レンズ情報やタイトルを自動入力

    予め設定しておいたタイトル情報やLightroomのキーワードに応じて、レンズ情報を入力できます。撮影情報がカメラの撮影データに記録できないオールドレンズで活用できる機能です。

リサイズ後にウォーターマークやレンズ情報などを自動入力した結果はFlickrの写真をご覧ください。一例を挙げると以下の写真のようになります。

The Floral Garden 08504 | Sony α7R2 + LAOWA 105mm F2 Bokeh Dreamer STF
 The Floral Garden 08504 | Sony α7R2 + LAOWA 105mm F2 Bokeh Dreamer STF ©
Shimatabi 00793 | Sony a7 + Ai Nikkor 50mm f/1.2S
 Shimatabi 00793 | Sony a7 + Ai Nikkor 50mm f/1.2S ©

それでは、機能について一部詳しく見ていきたいと思います。

Lightroomキーワードに応じたウォーターマーク配置

ウォーターマークはLightroomのキーワードで指定した内容に応じて、配置位置を柔軟に変えることができます。

Lightroomで入力するキーワード ウォーターマークの配置位置
pos:top-left 左上
pos:top-right 右上
pos:bottom-left 左下
pos:bottom-right 右下
pos:middle-center 中央

キーワード指定がない場合には右下配置がデフォルトの動作となっています。また、デフォルトの配置位置は後から設定で変更することもできます。

図2.Lightroomのキーワードに応じて配置位置が変えられる
図2.Lightroomのキーワードに応じて配置位置が変えられる ©

Lightroomキーワードによるレンズ情報の自動入力

非CPUレンズ使用時(例えばオールドレンズ)のExif情報を書き出し時に入力させる事も可能です。

こちらもLightroomのキーワードで指定したレンズタグに応じて、レンズ情報(Exif)やタイトル、タグを自動で入力してくれます。

図3.Lightroomのキーワードに応じてExifやタグを自動入力
図3.Lightroomのキーワードに応じてExifやタグを自動入力 ©

上記画像の右側は、リサイズされた画像をFlickrへアップロードし、Exifを表示させた例です。例のように、電子接点を持たないオールドレンズなどでも、Exifを後から自動入力させる事が可能になります。

タグは自身で定義ができますが、予め用意した内容の一例を挙げると次の通りです。

Lightroomで入力するキーワード 入力されるレンズのExif情報
lens:laowa105mm LAOWA 105mm F2 Bokeh Dreamer STF
lens:50mmf1.2s Ai Nikkor 50mm f/1.2S

その他はsettings/cameraLens.jsonをご覧ください。このファイル内でレンズ名や焦点距離の情報を予め入力しておきます。

図3の例では、接点が備わっていないレンズであるLAOWA 105mm F2 Bokeh Dreamerを使った写真の例となります。Lightroomで指定したlens:laowa105mmキーワード・タグによって、後からExifやタイトル、タグ情報が自動で入力されていきます。

書き出し例は以下の写真をご覧ください。

sleeping cats | Sony α7R2 + LAOWA 105mm F2 Bokeh Dreamer STF
 sleeping cats | Sony α7R2 + LAOWA 105mm F2 Bokeh Dreamer STF ©

(引用元のFlickr:アップロードした画像)

必要なもの

それでは、次にスクリプトの導入方法を簡単に説明したいと思います。スクリプトの利用には

  • node.js (とnvm)
  • git
  • imagemagick
  • exiftool
  • cairo

node.jsとgitのインストールの方法は下記をご覧ください。

次に、imagemagickとexiftool、そしてcairoのインストールを行います。各プログラムは次のURLやコマンドからインストールができます。

コマンドの基本的な操作方法は別の記事をご覧ください。

npmインストール

必要な物が揃ったら、npmインストールを行います。

bash
1
2
3
$ git clone https://github.com/tea3/resize-and-watermark.git
$ cd resize-and-watermark
$ npm install

次に、resize-and-watermarkディレクトリ内の_config.ymlを編集します。_config.ymlには、次のように設定を書いていきます。

_config.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
resizePix:                              # リサイズを行いたい種類をここに書きます。
- 0 # リサイズの例1:オリジナルサイズで書き出し
- 1024 # リサイズの例2:長辺1024pxリサイズして書き出し
- 2048 # リサイズの例3:長辺2048pxリサイズして書き出し
# ignoreWatermark: # リサイズ画像にウォーターマークを付けたくない場合は、ここに指定します。
# - 0
# - 1024
readDir: # リサイズを行うディレクトリ。パスは複数指定可能です。
- ./sample JPG/targetFolder
distDir: ./sample JPG/resizedFolder # リサイズ画像を書き出すディレクトリ
watermark: src/sample-watermark.png # ウォーターマーク画像のファイルパス
watermarkWidthRate : 0.1 # ウォーターマークサイズの指定。リサイズされた画像に対するサイズを指定します。
watermarkMarginRate: 0.02 # ウォーターマークの余白の大きさ。
# defaultWatermarkPosition: # ウォーターマークのデフォルト配置位置
# - North
# - West
# watermarkColor: auto # ウォーターマークのカラーオーバーレイ (例 : auto , 00FFFF , FF00FF , FFFF00 , red , green , blue , ...) ウォーターマークのカラーオーバーレイをautoにした場合、画像の中から色が自動抽出される
# defaultLens: lens:laowa105mm # Exifにレンズ情報が無く、キーワードにレンズ情報の指定がない場合、ここで指定したレンズが入力される
# parallelLimit: 4 # 並列処理したい最大の数。CPU数の2倍程度を指定しておくと、パフォーマンスが良くなります。

quality: 97 # JPEGの品質(圧縮率)

fileTitle: My Picture # リサイズ画像に含めるタイトル名(Flickrなどで表示されるXMPのタイトル)
constTag: # リサイズ画像に常に含めておきたいタグ(Flickrなどで表示されるIPTCのキーワード)
- photo
- animal
- etc
copyright: (c) your-name # リサイズ画像に常に含めておきたいコピーライト情報(Exif)
descriptionTemplate : desciption # リサイズ画像に常に含めておきたい説明(Flickrなどで表示されるXMPのディスクリプション)

スクリプトを呼び出す

設定が記述できたら、スクリプトを実行します。

bash
1
$ node index.js resize

または

bash
1
$ node index.js r

スクリプトを実行すると、冒頭の図1のようにリサイズ処理がスタートします。

図1.リサイズが実行される
図1.リサイズが実行される ©

Mac OSXの場合はAutomatorから呼び出せる

Macユーザーの場合はAutomatorからNode.jsを呼び出せます。Automatorに次のようなスクリプトを書き、Lightroomの書き出し設定 > 後処理でAutomatorのアプリを登録しておきます。

Lightroomの後処理にアプリを登録しておくと、画像書き出し後にリサイズやウォーターマーク処理が実行されます。

automator.jsa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function run(input, parameters) {

var cdm = "cd \"$HOME/Desktop/your-cloned-dir/resize-and-watermark\"";
var nvm = "nvm use 4.3.0";

var Terminal = Application('Terminal')
Terminal.activate()
var terW1 = Terminal.windows[0]
try{
console.log(terW1.selectedTab.properties())
}catch(e){
Terminal.doScript("echo 'Hi terminal window 1'");
terW1 = Terminal.windows[0]
}
waitDelay(terW1)

Terminal.doScript( cdm , {in: terW1} )
waitDelay(terW1)
Terminal.doScript( nvm , {in: terW1} )
waitDelay(terW1)
Terminal.doScript( "node index.js resize" , {in: terW1} )
waitDelay(terW1)

return input;
}

function waitDelay(inTerminalWindow){
delay(1)
while( inTerminalWindow.selectedTab.busy() ){
delay(1)
}
}

Mac OSX純正アプリ「Automator」でスクリプトを実行する方法については、下記をご覧ください。

最後に

いかがだったでしょうか? 今回はLightroomからリサイズやウォーターマーク追加のバッチ処理する方法をご紹介しました。完全にオレオレ仕様ですが、似たような処理をされたい方は宜しければ参考にしてください^^