Skip to content

Instantly share code, notes, and snippets.

@xxxkurosukexxx
Created December 16, 2014 09:26
Show Gist options
  • Save xxxkurosukexxx/8238af285f889fe09e0a to your computer and use it in GitHub Desktop.
Save xxxkurosukexxx/8238af285f889fe09e0a to your computer and use it in GitHub Desktop.
Photoshop:一括比較明合成スクリプト
/*
<javascriptresource>
<name>一括比較明合成 for 20141214</name>
<type>automate</type>
<about>特定フォルダー内の画像を比較明合成する。ついでにタイムラプス動画用のシーケンス画像も書き出し。</about>
<enableinfo>true</enableinfo>
</javascriptresource>
*/
/*
* TODO: ファイル名周りの整備(連番の桁数)
* TODO: プログレスバーの表示(これは...やらないかも)
* TODO: 設定周りのGUI化(最終目標)
* TODO: ブラックレイヤーの設定と言うか初期処理(今はブラックレイヤーが設置されてるファイルが開いてある前提なので)
*/
// CONFIG -----
/* 画像ファイル名の接頭詞 */
var filePrefix = "IMG_";
/* 画像ファイルの拡張子 */
var fileExtension = ".JPG";
/* 入力画像が配置されてるディレクトリ */
var inDir = "f:\\20141214\\imgs3\\";
/* 出力画像を保存するディレクトリ */
var outForMovieDir = "f:\\20141214\\imgsForMovie\\";
// ----- CONFIG
var inImgNo = 0;
var loopFlg = true;
main();
/**
* メイン。
* シーケンス画像が存在する間繰り返す。
* シーケンス画像を補正し、本体に合成,動画用シーケンス画像を保存する。
*/
function main() {
var startTime = new Date();
var masterImg = activeDocument;
// クリップボードにデータを持ってく意味が無いので一時的に無効にする。(処理の最後で元の設定に戻す。)
var orgClipBoardConfig = preferences.exportClipboard;
preferences.exportClipboard = false;
do {
var fileName = getFilename(++inImgNo);
var fileObj = new File(inDir + fileName);
if(fileObj.exists) {
// シーケンス画像を開く
open(fileObj);
var seqImg = activeDocument;
// シーケンス画像の加工
// (今回はLrで一括処理したので無し。)
// シーケンス画像をコピーして本体に貼り付け
seqImg.activeLayer.copy();
activeDocument = masterImg;
masterImg.paste();
seqImg.close(SaveOptions.DONOTSAVECHANGES);
seqImg = null; // 念のため解放
// 貼り付けたレイヤーのモード変更
masterImg.activeLayer.blendMode = BlendMode.LIGHTEN;
if(inImgNo > 1) {
// 下のレイヤーと結合
masterImg.activeLayer.merge();
// 結合したレイヤーのモード変更
masterImg.activeLayer.blendMode = BlendMode.LIGHTEN;
}
// 動画用画像の保存
saveForMovie(fileName);
// 定期保存
if(inImgNo % 10 == 0) {
masterImg.save(SaveOptions.SAVECHANGES);
}
} else {
loopFlg = false;
// 最後なので保存
masterImg.save(SaveOptions.SAVECHANGES);
}
fileObj = null; // 念のため解放
} while(loopFlg);
// クリップボードの設定を戻す
preferences.exportClipboard = orgClipBoardConfig;
// 処理時間を集計し表示する。
var endTime = new Date();
beep();
bringToFront();
alert(endTime - startTime + "ms");
}
/**
* ファイル名の生成
* @param int index 連番
* @return string IMG_NNNN.jpg
*/
function getFilename(index) {
if(index < 10) {
return filePrefix + "000" + index + fileExtension;
} else if(index < 100) {
return filePrefix + "00" + index + fileExtension;
} else if(index < 1000) {
return filePrefix + "0" + index + fileExtension;
} else {
return filePrefix + index + fileExtension;
}
}
/**
* JPEGで保存
* @param string fileName ファイル名
*/
function saveForMovie(fileName){
jpgFile = new File(outForMovieDir + fileName);
jpgSaveOptions = new JPEGSaveOptions();
jpgSaveOptions.embedColorProfile = true;
jpgSaveOptions.formatOptions = FormatOptions.STANDARDBASELINE;
jpgSaveOptions.matte = MatteType.NONE;
jpgSaveOptions.quality = 10;
activeDocument.saveAs(jpgFile, jpgSaveOptions, true, Extension.LOWERCASE);
jpgFile = null; // 念のため解放
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment