안녕하세요. 제가 포토샵 스크립트를 이용하여 PSD 파일내의 모든 레이어를 자동으로 하위폴더 구조를 유지하며 저장할 수 있는 스크립트를 만들어서 올렸었는데요. 바로 아래 링크에서요.
https://diy-dev-design.tistory.com/17
블로그에 방문 주신 분께서 레이어 자동 저장 기능에 해당 레이어 크기로 이미지가 저장 되었으면 좋겠다는 의견을 주셔서 한번 만들어 보았습니다.
사실 사용하는 분마다 차이가 있을 것 같은데요. 아마 레이어의 크기로 저장되는 기능이 꼭 필요한 분도 계실 거라 생각되어 별도로 페이지를 하나 만들었습니다.
전체 스크립트는 큰 차이가 없으며 현재 레이어의 크기를 파악하고 그 크기로 저장하는 방법만 추가하면 될 것 같습니다.
아래의 내용을 추가할 계획입니다.
- 현재 레이어의 크기 (가로, 세로) 를 구해본다 : Layer.bounds 라는 개체를 이용
- 구해진 크기로 새로운 임시 도큐먼트를 생성한다 : Documents.Add( ) 이용
- 생성된 임시 도큐먼트에 해당 레이어를 복사하여 붙여 넣는다 : Layer.copy() // document.paste()
- 도큐먼트를 지정된 파일이름과 위치에 저장하고 임시 도큐먼트는 닫는다. : document.close()
- 기존과 동일하게 전체 크기로 저장하기 위한 옵션을 두어 선택할 수 있게 한다.
어렵지 않죠?
아래 작성된 코드를 보시죠.
var pngOption = new PNGSaveOptions()
pngOption.embedColorProfile = true;
pngOption.formatOptions = FormatOptions.STANDARDBASELINE;
pngOption.matte = MatteType.NONE;
pngOption.quality = 100;
pngOption.PNG8 = false; //24 bit PNG
pngOption.transparency = true;
pngOption.interlaced = true;
// jpg 파일 저장을 위한 설정
var jpgSaveOption = new JPEGSaveOptions()
jpgSaveOption.quality = 10;
var sType = "png" // jpg 로 파일을 저장하기를 원하는경우, png 로 저장을 하고 싶다면 "png"
var cDoc = app.activeDocument
var tempLayers = cDoc.layers
var cWidth = cDoc.width
var cHeight = cDoc.height
var cRes = cDoc.resolution
var savePath = cDoc.path + "\\"
var saveAsEachLayerSize = true
// 일단 모든 레이어를 꺼줍니다.
for (var i = 0 ; i < tempLayers.length; i++)
{
tempLayers[i].visible = false
}
// 아래의 한줄의 함수로 모든 레이어를 저장합니다.
explorerLayerSet_new(savePath, cDoc)
function explorerLayerSet_new (cPath, lSet){
var dLyrs = lSet.layers
var documentSaveType = pngOption;
if (sType == "jpg")
{
documentSaveType = jpgSaveOption
}
for (var k = 0 ; k < dLyrs.length; k++){
if (dLyrs[k].typename == "LayerSet")
{
dLyrs[k].visible = true
ePathName = cPath + dLyrs[k].name + "\\"
ee = new Folder(ePathName)
ee.create();
explorerLayerSet_new (ePathName, dLyrs[k])
dLyrs[k].visible = false
}else{
dLyrs[k].visible = true
dFile = File(cPath + dLyrs[k].name + "." + sType)
if (saveAsEachLayerSize == false)
{
cDoc.saveAs(dFile, documentSaveType,true, Extension.LOWERCASE)
}else{ // 레이어의 크기에 맞추어 파일을 저장하는 기능
// layer.bounds 를 이용하여 레이어의 크기를 얻어올 수 있다.
var cBounds = dLyrs[k].bounds
var newWidth = cBounds[2] - cBounds[0];
var newHeight = cBounds[3] - cBounds[1];
dLyrs[k].copy();
// 레이어의 크기와 동일한 도큐먼트를 하나 생성한다.
var tmpDoc = app.documents.add(newWidth, newHeight, cDoc.resolution, dLyrs[k].name, NewDocumentMode.RGB, DocumentFill.TRANSPARENT);
tmpDoc.paste();
tmpDoc.saveAs(dFile, documentSaveType,true, Extension.LOWERCASE);
tmpDoc.close(SaveOptions.DONOTSAVECHANGES);
}
if (dLyrs[k].name.indexOf("All") == -1)
{
dLyrs[k].visible = false
}
}
}
lSet.visible = false
}
기존 saveAs 부분이 변경이 되었습니다.
png, jpg 를 판단하는 부분을 위쪽으로 빼서 documentSaveType 이라는 변수에 저장 옵션을 담아 버렸습니다.
그리고 위쪽에 saveAsEachLayerSize 라는 변수를 두어 True 일 경우 레이어 크기로, False 일 경우 전체 도큐먼트 크기로 저장이 되게 하여 기존의 방식이 필요한 분들도 하나의 스크립트로 사용할 수 있도록 하였습니다.
이렇게 해서 버전 3 가 되었네요. 좋은 의견 주신 '포도' 님께 감사드립니다.
이전의 레이어 자동 저장 스크립트 포스트와 레이어 관련하여 공부할 만한 포스트를 링크 합니다.
2019/11/14 - [DEV/Adobe Script] - [포토샵스크립트] 스크립트로 레이어 생성, 이동, 복사 하기
2019/12/04 - [DEV/Adobe Script] - [포토샵스크립트] Instagram 용 파노라마 사진 자르기
공감은 작성자에게 큰 힘이 된답니다. 아시죠? ^^
'DEV > Adobe Script' 카테고리의 다른 글
[포토샵스크립트] 매직완드 기능 스크립트로 실행하기 (0) | 2020.02.14 |
---|---|
[포토샵스크립트] 레이어 컨텐츠 영역 선택하기 (0) | 2020.01.23 |
[포토샵스크립트] Instagram 용 파노라마 사진 자르기 (0) | 2019.12.04 |
[포토샵스크립트] 스크립트로 레이어 생성, 이동, 복사 하기 (0) | 2019.11.14 |
[포토샵스크립트] 문자를 이용하여 사진 표현하기 (2) | 2019.10.14 |