Photoshop のスクリプト機能を使ってウォーターマークを自動で入れる方法

Photoshop の スクリプト機能を使って画像へウォーターマークを挿入する方法を紹介します。
これでウォーターマークの画像をペーストしてリサイズしてといういつも変わらない一連の流れを自動化できたらと思います。
働き方改革の一環ですね!!
以前に同じようにウォーターマークを挿入する処理を自動化する方法として「アクション」という機能を紹介しました。
アクションではより限られたコマンドしか利用出来なかったりして、やれることに制限が多くありました。
より自由度の高い作業を行うために今回はスクリプトでの方法を紹介しようと思います。
今回紹介するスクリプトは以下のからダウンロードすることが出来ます。
ウォーターマーク追加スクリプト ダウンロード
スクリプト
Photoshop には自動化の手法としてスクリプトを実行することが出来る機能が実装されています。
スクリプト機能では javascript というプログラミング言語で記述されたプログラミングを実行することが出来ます。
この javascript というのは Webページなどでも利用されている Web 界隈では非常に有名なプログラミング言語です。
今回はこの javascript というのを利用してウォーターマークを画像に自動的に挿入して行きます。
実行方法
まず動かしてみないと分からないので Photoshop で僕が作ったスクリプトを実行してみます。
上のリンクからダウンロードした Zip ファイルを解凍して「AddWatermark.jsx」を以下のフォルダーにコピーして下さい。
C:\Program Files\Adobe\Adobe Photoshop CC 2018\Presets\Scripts
Windows の方は上記の C:\ からの文字列をコピーしてから、キーボードの と [E] を同時押ししてエクスプローラーが立ち上がったら、[Alt] と [D] を同時押し、[Ctrl] と [V] の同時押しでエンターすればそのディレクトリに飛べると思います。
そこに解凍した「AddWatermark.jsx」ファイルをコピーして下さい。
Photoshop を既に起動していれば、再起動して以下のようにメニューを開くと「AddWatermark」があると思います。
ここから実行出来ると思うのですが、 その前に! 少々設定しなければいけない部分があるのでメモ帳でコピーしたファイルを開いて下さい。
ファイルの中身は以下のようになっています。あまり褒められたコードではないですが、修正出来る人は修正してもらえれば改善出来る事も多いと思います。
// ウォーターマークのあるファイルのパスを指定する. const WATERMARK_FILE_PATH = "C:\\Users\\HogeHoge\\Watermark.png" // 元画像の長編に対するウォーターマーク画像の横幅の割合を指定する. const SIZE_RATIO = 0.1; // ウォーターマークの横位置 (LEFT / CENTER / RIGHT) を指定する. const POSITION_X = "CENTER"; // ウォーターマークの縦位置 (TOP / CENTER / BOTTOM) を指定する. const POSITION_Y = "CENTER"; // ウォーターマークの端と元画像の端の間のマージンを元画像の横幅との割合で指定する. // ※ 横位置を CENTER 以外に指定しているときに作用する. const MARGIN_X = 0.02; // ウォーターマークの端と元画像の端の間のマージンを元画像の縦幅との割合でしているする. // ※ 縦位置を CENTER 以外に指定しているときに作用する. const MARGIN_Y = 0.02; // ウォーターマークの不透明度をパーセンテージで指定する. const OPACITY = 80; // 元のファイルの情報を保持する var masterDoc = activeDocument; var masterWidth = activeDocument.width; var masterHeight = activeDocument.height; var originalPreferencesRulerUnits = preferences.rulerUnits; // ピクセルで計算するので尺度を変更する。 preferences.rulerUnits = Units.PIXELS; // ウォーターマークのファイルを開く fileObj = new File(WATERMARK_FILE_PATH); app.open(fileObj); // ウォーターマークの拡縮割合を算出しリサイズする if (masterWidth > masterHeight) { var imageRatio = masterWidth * SIZE_RATIO / activeDocument.width; } else { var imageRatio = masterHeight * SIZE_RATIO / activeDocument.width; } activeDocument.resizeImage(activeDocument.width * imageRatio, activeDocument.height * imageRatio); // 元画像にウォーターマークを追加する activeDocument.activeLayer.copy(); activeDocument.close(SaveOptions.DONOTSAVECHANGES); var wmLayObj = activeDocument.artLayers.add(); masterDoc.paste(); // レイヤーサイズを適正化 wmLayObj.resize = (activeDocument.width * imageRatio, activeDocument.height * imageRatio); // レイヤーの位置を変更する // 移動は絶対位置ではなく現在の位置からの相対位置をしているため、移動距離の算出 var translateX = 0; var translateY = 0; wmBounds = activeDocument.activeLayer.bounds; // 横の移動距離の算出 if (POSITION_X == "CENTER") { translateX = (masterWidth / 2 - (parseInt(wmBounds[2]) - (parseInt(wmBounds[2]) - parseInt(wmBounds[0])) / 2 )); } else if (POSITION_X == "LEFT"){ translateX = (masterWidth * MARGIN_X) - parseInt(wmBounds[0]); } else if (POSITION_X == "RIGHT") { translateX = (masterWidth - masterWidth * MARGIN_X) - parseInt(wmBounds[2]); } // 縦の移動距離の算出 if (POSITION_Y == "CENTER") { translateY = (masterHeight / 2 - (parseInt(wmBounds[3]) - (parseInt(wmBounds[3]) - parseInt(wmBounds[1])) / 2 )); } else if (POSITION_Y == "TOP"){ translateY = (masterHeight * MARGIN_Y) - parseInt(wmBounds[1]); } else if (POSITION_Y == "BOTTOM") { translateY = (masterHeight - masterHeight * MARGIN_Y) - parseInt(wmBounds[3]); } // 実際の移動処理 wmLayObj.translate(translateX, translateY); // 不透明度の変更 wmLayObj.opacity = OPACITY; preferences.rulerUnits = originalPreferencesRulerUnits;
主に変更する場所は 16行目までの部分になります。
まず、一番始めに修正して欲しいところは、const WATERMARK_FILE_PATH = のあとの "C:\\Users\\HogeHoge\\Watermark.png"
という部分です。
これは画像に挿入するウォーターマークの画像ファイルを指定するものです。「png」ファイルが推奨です。
この部分をウォーターマークのファイルのパスで置換して下さい。
ファイルのパスは、[Shift] キー と 右クリックの同時押しで「パスのコピー(A)」というメニューが出てくるのでそれをクリックするとコピーすることが出来ます。
ダブルクォーテーションまでコピーされるので、プログラムを修正するときは、ダブルクォーテーションまで選択して貼り付けをして下さい。
この時、¥(半角)または \ がフォルダの区切り文字になっていますが、これを一つづつ増やして下さい。一つのみだと正常に動かないハズです。
プログラムの仕様上仕方ないので、よろしくお願いします。
ここまでやればひとまず動作するはずです。
保存して Photoshop からさっきのファイルメニューからたどっていって 「AddWatermark」をクリックして下さい。
こんな感じにウォーターマークが入ったかなぁと思います。
調整方法
ウォーターマークの位置や不透明度などを調整出来るようにしているので、そこの部分を少し紹介したいと思います。
// ウォーターマークのあるファイルのパスを指定する. const WATERMARK_FILE_PATH = "C:\\Users\\HogeHoge\\Watermark.png" // 元画像の長編に対するウォーターマーク画像の横幅の割合を指定する. const SIZE_RATIO = 0.1; // ウォーターマークの横位置 (LEFT / CENTER / RIGHT) を指定する. const POSITION_X = "CENTER"; // ウォーターマークの縦位置 (TOP / CENTER / BOTTOM) を指定する. const POSITION_Y = "CENTER"; // ウォーターマークの端と元画像の端の間のマージンを元画像の横幅との割合で指定する. // ※ 横位置を CENTER 以外に指定しているときに作用する. const MARGIN_X = 0.02; // ウォーターマークの端と元画像の端の間のマージンを元画像の縦幅との割合でしているする. // ※ 縦位置を CENTER 以外に指定しているときに作用する. const MARGIN_Y = 0.02; // ウォーターマークの不透明度をパーセンテージで指定する. const OPACITY = 80;
まず調整したいのはウォーターマークのサイズですが、SIZE_RATIO というパラメータから変更することが出来ます。
コメントにも書いていますが、元画像の長辺に対する割合で指定して下さい。10% 位のサイズであれば 0.1 というように。
ウォーターマークの大体の位置は、POSITION_X と POSITION_Y で指定することが出来ます。
それぞれコメントからコピーして LEFT RIGHT TOP BOTTOM CENTER を指定して下さい。
微調整、画像端からの位置は MARGIN_X と MARGIN_Y からそれぞれ元画像の横幅・縦幅の割合でします。
位置を LEFT に指定していれば、元画像の左端からの位置 RIGHT ならば右端からの位置です。
TOP BOTTOM も同様、上からの位置と下からの位置です。
ちなみにこれは CENTER をしている場合には作用しないので、ご注意願います。
ウォーターマークの不透明度も設定出来るようにしていて、初期は 80% に指定していますが、任意の値に変更して下さい。
これらを修正して、ウォーターマークの位置を指定出来るようになっています。
パラメータを変更しながら何度も実行するとこのようになります。
レイヤーとして追加されるので、レイヤーを選択して微調整することも可能です。
プログラムについて
プログラムにて使える機能は以下にドキュメントがありました。
あまり見やすくはないですが、これを見ながら書けばなんとか書くことが出来そうです。
あと、google で検索すると出てくるものもあるので、調べながら書けば色々カスタマイズすることが出来ると思います。
上で設定したパラメータを 画面で編集するようにもできましたが、ウィンドウが立ち上がると面倒だし一度場所を決めてしまえばそれほど変更しないかと思いプログラムに埋め込んでしまいました。
Photoshop 自動化について
以前に紹介したアクションもそうですが、作業の省力化のための機能が乗っているのはとても便利です。
画像のリサイズなどに使っている人もいるようで、検索すると色々と出てきます。
ショートカットも割り振れますので、便利に使って作業を簡単にできればと思います。
プログラムは、自由にお使い下さい。