현재 제작중인 '마왕의 책'에서 배경을 커다락 블럭으로 만들어서 조합해서 사용하고 있습니다.
그러다보니 배경을 패턴에 맞춰서 그린 후 그것을 일정 간격으로 잘라서 저장해야 합니다.
그런데 매번 PSD 파일에서 일정 간격을 Crop해서 저장하는 과정이 너무나도 번거롭기 때문에 자동화 해보기로 했습니다.
Photoshop에는 photoshop script를 이용한 자동화가 가능합니다.
이 스크립트로는 아주 많은 기능을 구현할 수 있습니다.
기본적으로 이번에 작성한 스크립트는 아래와 같이 단순합니다.
function main() {
if( app.documents.length == 0 ) {
alert("This script requires that there are open document to run.");
} else {
var outputFolder = Folder.selectDialog ("Select a folder for the output files");
if( outputFolder == null ) {
alert("You have to select output folder.");
return;
}
var cropWidth = parseInt(prompt("Input crop width", "100", "Input width"));
var docOriginName = app.activeDocument.name + "";
var docWidth = app.activeDocument.width.value;
for(var offset = 0 ; offset < docWidth ; offset += cropWidth ) {
var docOrigin = app.documents.getByName (docOriginName);
app.activeDocument = docOrigin;
$.writeln (docOrigin.name);
//$.sleep(1000);
var doc = docOrigin.duplicate();
var width = cropWidth;
if( docWidth - offset < cropWidth )
width = docWidth - offset;
var bound = [offset, 0, offset + width, docOrigin.height.value];
doc.crop(bound);
var pngOptions = new PNGSaveOptions();
pngOptions.compression = 0
pngOptions.interlaced = false
doc.saveAs( File( outputFolder + "/" + docOrigin.name + "_split" + offset / cropWidth + ".png"), pngOptions, false);
doc.close();
}
}
}
main();
내부 코드를 단계별로 나눠서 설명하겠습니다.
스크립트 레퍼런스는 아래 링크에 있습니다.
http://wwwimages.adobe.com/content/dam/Adobe/en/products/photoshop/pdfs/cs6/Photoshop-CS6-JavaScript-Ref.pdf
app.documents
이 부분은 현재 Photoshop에 열려있는 이미지들을 말합니다.
app.documents.length == 0 으로 체크하는 것은 열려 있는 파일이 하나도 없는 경우를 말합니다.
쪼개려는 이미지가 있어야 스크립트가 실행가능하기 때문에 현재 열려있는 이미지가 있는지 확인해 줍니다.
alert("Hello world!!");
이 함수는 Photoshop에서 메시지 박스를 출력합니다.

Folder.selectDialog("message");
이 함수는 폴더선택창을 열어줍니다.
쪼갠 이미지를 저장하기 위한 폴더를 선택합니다.

prompt("message", "default value", "title");
이 함수는 값을 입력받기 위한 입력박스를 열어줍니다.
입력받는 문자열값을 숫자로 처리하기 위해서 parseInt 함수를 사용합니다.

app.activeDocument
이 속성은 현재 활성화된 이미지를 말합니다.
쪼개려는 이미지 윈도우를 활성화 시킨 상태에서 실행하면 됩니다.
app.activeDocument.name은 이미지의 이름을 말합니다.
아래 이미지에서 화살표로 표시된 부분에 '농장컨셉이미지.jpg' 가 이름입니다.

document는 직역하면 문서지만 Photoshop에서는 이미지를 말합니다.
document.width, document.height는 이미지의 크기이며 타입은 UnitValue입니다.
UnitValue는 여러가지 단위를 표현하기 위한 객체입니다.
var length = new UnitValue(100, "px"); //100 pixels
new UnitValue(100, "in"); // 100 inches
위와 같이 다양한 길이 단위를 표현할 수 있습니다.
기본적으로는 pixel단위를 사용하는 듯 합니다.
document.duplicate(["name"], [true/false]);
이 함수는 document 이미지를 복제해서 새로운 이미지를 만듧니다.
이때 별도로 두번째 파라메터를 정하지 않으면 모든 layer가 합쳐진 이미지가 생성됩니다.
document.crop( bounds, [rotation], [width], [height]);
이 함수는 말 그대로 이미지를 crop해줍니다.
var bounds = [left x, left y, right x, right y];
document.crop(bounds);
이렇게 호출해 주면 해당 영역만 남기고 이미지를 잘라냅니다.
PNGSaveOptions는 PNG로 저장하기 위한 저장옵션을 설정합니다.
doc.saveAs는 말 그대로 이미지를 저장하기위한 함수이고
doc.close()는 열린 이미지를 닫습니다.
이런 단순한 코드로 귀찮은 작업을 줄일 수 있습니다.











![20160428_170943[1]](https://i0.wp.com/milennium9.godohosting.com/wordpress/wp-content/uploads/2016/05/20160428_1709431.jpg?resize=474%2C266)
![20160429_112014[1]](https://i0.wp.com/milennium9.godohosting.com/wordpress/wp-content/uploads/2016/05/20160429_1120141.jpg?resize=474%2C266)

여기에서 준비하라고 하는거는 다 준비하고나서 본격적인 과정이 시작됩니다.준비가 안되어 있으면 어차피 진행이 안됩니다.

잘 읽어보고 확인 눌러줍니다.


































