Photoshop × JavaScript × 自動処理
お疲れ様です。
O🐶です。
最近スマホ📱を新調しました。
ずぅ~とっ、iPhoneを使ってましたが、Androidスマホに替えました。
Zenfone 4 MaxというASUA製のスマホで、5.2型ワイドの大画面でプライム・ビデオなどを楽しんでいます😆。
が。。。購入した3日後に新型のZenfone 5が発表されるという悲劇がありました。。。😂
発売は6月下旬以降だそうです。。。
さて今月のブログですが、イラスト数百点を、Webに掲載するための画像に再保存するという仕事を行いました。
再保存する画像は、最終的に300×300pxの正方形のドキュメントにしたいとの要望でした。
画像の点数が多いのでアクションやドロップレットといった自動化を考えましたが、横長、縦長、正方形という矩形の長短を判断するロジックが必要だと思い、プログラム(JavaScript)で処理をする方法を選びました。
※Photoshop自動化の過去記事「Photoshopの自動処理でラクする話し」も併せてご参照ください。
以前にも紹介しましたExtendScript Toolkitを使用します。
仕様
・スクリプトを実行すると処理対象の画像を格納したフォルダを選択するダイアログが表示されます。
・デスクトップにタイムスタンプのフォルダを作成し、その中に処理後の画像を保存します。
例 : 2018年05月16日17時25分21秒_処理後
・画像は縦、横のいずれかの長辺を300pxにリサイズし、カンバスサイズを300×300pxに調整します。
短辺で300pxに足りない部分は拡張し背景色で塗りつぶします。
全体のコードは以下です。
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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
MAIN: { //ラベル var preFolder = Folder.selectDialog("処理を行う画像の入ったフォルダを選択してください。"); if (!preFolder) { //キャンセルの場合 alert("処理を中断します。"); break MAIN; } var preFiles = preFolder.getFiles(); //処理前のフォルダから全てのファイルを取得 //▼保存するフォルダをデスクトップに作成 var newFolder = new Folder("~/Desktop/" + getTime() + "_処理後"); newFolder.create(); //▼環境設定 var prefUnit = app.preferences.rulerUnits; //環境設定 > 単位・定規 > 定規の単位を取得 app.preferences.rulerUnits = Units.PIXELS; //定規の単位を、一度Pixelに変更 // リサイズ、キャンバスサイズ変更 //////////////////////////////////////////////////////////////////// for (var i = 0, preFilesLen = preFiles.length; i < preFilesLen; i++) { //一度全てのファイルを開ききる open(preFiles[i]); var doc = app.activeDocument; //ドキュメント var fileName = doc.name; //ファイル名を取得 var hSize = 300; //横サイズ var vSize = 300; //縦サイズ var res = 72; //解像度 var docWidth = doc.width; //横サイズ var docHeight = doc.height; //縦サイズ if (docWidth > docHeight) { //横長の場合 doc.resizeImage(hSize, docHeight * (vSize / docWidth), res, ResampleMethod.BICUBIC); doc.resizeCanvas(hSize, vSize); //キャンバスサイズ変更 } else if (docWidth < docHeight) { //縦長の場合 doc.resizeImage(docWidth * (vSize / docHeight), hSize, res, ResampleMethod.BICUBIC); doc.resizeCanvas(vSize, hSize, AnchorPosition.MIDDLECENTER); //キャンバスサイズ変更 } var saveFolder = new File(newFolder + "/" + fileName); //デスクトップにフォルダを作って保存 jpegOutput(); //jpeg保存関数実行 activeDocument.close(SaveOptions.DONOTSAVECHANGES); //保存しないで閉じる } app.preferences.rulerUnits = prefUnit; //定規の単位を、元に戻す alert("処理が終わりました。"); } // 関数定義 //////////////////////////////////////////////////////////////////// //▼JPEG保存関数 function jpegOutput() { var jpegOption = new JPEGSaveOptions(); jpegOption.embedColorProfile = false; //カラープロファイルを含めない jpegOption.formatOptions = FormatOptions.PROGRESSIVE; //形式オプション:プログレッシブ jpegOption.scans = 3; //スキャン:3 jpegOption.quality = 12; //画質:最高(低圧縮率) activeDocument.saveAs(saveFolder, jpegOption, true, Extension.LOWERCASE); //保存内容、保存オプション、複製保存 } //▼フォルダ名に付与する日付を取得 function getTime() { var myDate = new Date(); var myYear = myDate.getFullYear(); var myMonth = myDate.getMonth() + 1; var myDay = myDate.getDate(); var myHours = myDate.getHours(); var myMinutes = myDate.getMinutes(); var mySeconds = myDate.getSeconds(); var nowTime = myYear + "年" + zeroPad(myMonth) + "月" + zeroPad(myDay) + "日" + zeroPad(myHours) + "時" + zeroPad(myMinutes) + "分" + zeroPad(mySeconds) + "秒"; return nowTime; } //▼ゼロパディング function zeroPad(zeroNum) { var zeroNum = ('00' + zeroNum).slice(-2); return zeroNum; } |
各詳細はコメントに書いた通りですが、
解像度変更の際のpx指定するための単位変更の処理、
1 |
app.preferences.rulerUnits = Units.PIXELS; |
とか、
カンバスサイズを変更する、
1 |
doc.resizeCanvas(hSize, vSize, AnchorPosition.MIDDLECENTER); |
とか、
ドキュメントの縦サイズ、横サイズを取得する、
1 2 |
var docWidth = doc.width; //横サイズ var docHeight = doc.height; //縦サイズ |
などは、プログラム作成時、習得できてなかったので困っていました。
色々調べていたら、「作業自動化研究所」様のサイトにたどりつき、そのものズバリの記事が掲載されていたので非常に助かりました。
「作業自動化研究所」様の「PhotoshopのjavaScriptコード集」
色々な記事を拝見させていただいたところ、1つずつのプロセスの紹介という構成になっており、明快!
明快なので習得しやすい。といった大変有益な内容になっております。
しかも、これらの記事が電子書籍化されており、大変お買い得な価格で販売されております。
私も購入し、勉強させていただいてます。
まとめ
DTPもWebも作業効率化は必須 !
少しでも効率化できるように日々勉強しましょう !
最後まで読んで下さり、ありがとうございましたm( _ _ )m
免責事項
・本サイトに掲載しているプログラムについて
掲載プログラム等を参考としてお使い頂くのは構いませんが、動作に関しては保証、および掲載プログラム等を使用することで発生するいかなる不具合、損害についても、当社、及び「作業自動化研究所」様は一切その責任を負いません。
ご不明な点等がございましたら、お問い合わせよりご連絡をお願い致します。