현재 제작중인 '마왕의 책'에서 배경을 커다락 블럭으로 만들어서 조합해서 사용하고 있습니다.
그러다보니 배경을 패턴에 맞춰서 그린 후 그것을 일정 간격으로 잘라서 저장해야 합니다.
그런데 매번 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()는 열린 이미지를 닫습니다.
이런 단순한 코드로 귀찮은 작업을 줄일 수 있습니다.