圖片名稱是:
a001-01.jpg
a001-02.jpg
a002-01.jpg
a002-02.jpg
b001-01.jpg
b001-02.jpg
b001-03.jpg
而希望可以依 a001.jpg, a002.jpg, b001.jpg 分類串接在一起。
執行方式:
- 檔案 -> 指令碼 -> 瀏覽 -> 選擇 photo_join.jsx
- 在選擇多張要串接的圖片
/** 圖片串接 for (PhotoShop Script)
* author : Jax
* email : weskerjax[at]gmail.com
* website : http://jax-work-archive.blogspot.com/
* history : 2013.02.23
*/
// photo_join.jsx
//#target photoshop
/**水平邊界px*/
var levMargin = 10;
/**垂直邊界px*/
var verMargin = 10;
var WebJpegOptions = new ExportOptionsSaveForWeb()
WebJpegOptions.format = SaveDocumentType.JPEG;
WebJpegOptions.quality=80;
function main(){
/*取得多個的檔案路徑*/
var fileList = File.openDialog(
"開啟 JPG 檔案",
"JPG Files:*.jpg",
true
);
if(fileList.length == 0){ alert("沒有任何檔案"); return; }
/*依檔名排序*/
fileList.sort();
/*檔案依前綴分群*/
var groupList = {};
var filePath, i=0;
while(filePath=fileList[i++]){
var prefix=filePath.name.match(/([a-z0-9]+)[-_].+\.jpg/i);
if(!prefix || !prefix[1]){continue;}
if(!groupList[prefix[1]]){ groupList[prefix[1]]=[]; }
groupList[prefix[1]].push(filePath);
}
/*依分群串接圖片*/
for(prefix in groupList){
photoJoin(prefix,groupList[prefix]);
}
}
function copyArt(toArt, fromArt){
/*複製圖層*/
app.activeDocument=fromArt;
fromArt.selection.selectAll()
fromArt.selection.copy()
/*貼上圖層*/
app.activeDocument=toArt;
return toArt.paste();
}
function photoJoin(prefix, fileList){
/*新增目標圖片文件*/
var newPic = app.documents.add(
1, 1, 72,
prefix,
NewDocumentMode.RGB,
DocumentFill.TRANSPARENT
);
workSpace=fileList[0].parent.fsName.replace(/\\/ig,'/');;
var height=0;
var width = newPic.width;
var correspond = [];
/*複製所有圖檔至新建立的圖檔*/
for (var i=0; i<fileList.length; i++){
try {
var atDoc=open(new File(fileList[i]));
} catch (e) { continue; }
/*累計高度*/
height += atDoc.height.value + verMargin;
/*最大寬度*/
width = Math.max(width,atDoc.width);
/*複製圖層*/
var layer = copyArt(newPic, atDoc);
correspond.push({
'layer':layer,
'height':atDoc.height.value
});
/*關閉檔案*/
atDoc.close(SaveOptions.DONOTSAVECHANGES);
};
app.activeDocument=newPic;
/*變更圖片大小*/
newPic.resizeCanvas(
width+levMargin*2,
height+verMargin,
AnchorPosition.TOPLEFT
);
/*變更圖層定位*/
var top=verMargin;
for (var i=0,l=correspond.length; i<l; i++){
if(correspond[i].layer===undefined){continue;}
correspond[i].layer.translate(levMargin, top); /*移動圖層*/
top += correspond[i].height+verMargin; /*定位累計*/
};
/*匯出網頁JPEG*/
newPic.exportDocument(
new File(File.encode(workSpace+"/"+prefix+".jpg")),
ExportType.SAVEFORWEB,
WebJpegOptions
);
/*關閉 newArt 文件*/
newPic.close(SaveOptions.DONOTSAVECHANGES);
}
/*把Photoshop推到最上層*/
app.bringToFront();
/*設定使用的單位為「像素(Pixel)」*/
app.preferences.rulerUnits = Units.PIXELS;
/*執行主程式*/
main();
alert('成功執行!');