Created
December 16, 2014 09:26
-
-
Save xxxkurosukexxx/8238af285f889fe09e0a to your computer and use it in GitHub Desktop.
Photoshop:一括比較明合成スクリプト
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
<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