반응형

예전 포스트에서 포토샵의 스크립트에대하여 설명하면서 대표적인 예로 레이어를 자동으로 저장하는 기능을 설명드린 적이 있는데요. 이번에는 좀더 간단한 ( 코딩 줄 수가 짧은 ) 스크립트로 다시 올려봅니다.

 

A-Z 하나하나 작성 설명을 포함했던 기존 스크립트

https://diy-dev-design.tistory.com/6

 

방식은 동일한데요. 변수나 함수의 정의 방법을 개선하여 대폭 코딩 양을 줄인 케이스 입니다.

 

1. 우선 PSD 파일의 모든 레이어에 대하여 PNG 파일로 저장이 됩니다.

2. 현재 PSD 파일의 경로에 폴더가 생성되고 그 하위에 이미지가 저장됩니다.

3. 저장되는 이미지는 현재 레이어의 이름으로 저장 됩니다.

4. 레이어 내에 폴더(레이어셋)가 있는경우 하위폴더가 해당 레이어 셋 이름으로 생성되고

5. 레이어 셋 내의 레이어 들은 그 하위 폴더 내부에 저장됩니다. 포토샵 구조와 동일하게 저장되죠.

6. 저장되는 파일은 PNG 파일로 저장이 됩니다. 

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;

var cDoc = app.activeDocument
var tempLayers = cDoc.layers
var cWidth = cDoc.width
var cHeight = cDoc.height
var cRes = cDoc.resolution
var savePath = cDoc.path + "\\"

// 일단 모든 레이어를 꺼줍니다.
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
	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 + ".png")
			cDoc.saveAs(dFile, pngOption,true, Extension.LOWERCASE)  
			if (dLyrs[k].name.indexOf("All") == -1)
			{
				dLyrs[k].visible = false
			}
		}
	}
	lSet.visible = false
}

 

네.. 많이 짧아 졌습니다.

 

일단 재귀함수 (반복해서 하위로 탐색해나가는 함수) 부분에 변수를 정의할 때 var 라는 지시어를 붙여 주어 로컬 변수가 될 수 있도록 하여 재귀 호출시에 문제가 없도록 변경한 것이 기존 대비 가장 큰 차이점이라 할 수 있겠습니다.

 

번거롭게 코딩하는 것이 귀찮으시면 위의 내용을 메모장에다가 붙여넣으신 다음 확장자를 jsx 로 하여 저장한뒤 사용하시면 되겠습니다.

 

포토샵에 기본적으로 들어있는 Layer Export 스크립트 보다 빠르고 하위 폴더까지 저장되므로 PSD 자료 정리에 편리하게 사용하시기 바랍니다.

 

포토샵에서 기존에 만들어진 스크립트를 사용하는 방법은 아래 포스트를 참고하세요~

https://diy-dev-design.tistory.com/47

 

[포토샵스크립트] 스크립트 단축키로 실행하기

안녕하세요. 오늘은 자신이 작성하였거나 웹에서 다운로드 받은 스크립트를 간단하고 빠르게 실행하는 방법을 알려드리겠습니다. 우선 스크립트를 실행하는 방법은 몇가지가 있는데 다음과 같습니다. Extend Scrip..

diy-dev-design.tistory.com

 

2019-09-10 내용을 추가합니다. : JPG 저장 옵션

기존 만들어진 스크립트에 jpg 파일로 저장하기 위한 옵션이 따로 있으면 좋을 것 같아서 jpg 파일 저장 옵션을 추가하였습니다. 아래 몇줄을 추가하고 나면 스크립트 초반에 저장하고 싶은 옵션을 골라 저장을 할 수 있습니다.

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 = 8;
    
var sType = "jpg" // 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 + "\\"

// 일단 모든 레이어를 꺼줍니다.
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
	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 (sType == "jpg") // jpg 로 저장을 하는 경우를 판단함
              {
                  cDoc.saveAs(dFile, jpgSaveOption,true, Extension.LOWERCASE)  
              }else{
                  cDoc.saveAs(dFile, pngOption,true, Extension.LOWERCASE)  
              }
			
			if (dLyrs[k].name.indexOf("All") == -1)
			{
				dLyrs[k].visible = false
			}
		}
	}
	lSet.visible = false
}

 

2019-12-04 일반 사용자 분들도 쉽게 사용하실 수 있도록 스크립트를 첨부하였습니다.

아래 링크에서 다운로드 받으셔서 사용하시면 됩니다.

레이어 저장이 필요한 PSD 파일을 열어두신 후 다운로드 받으신 jsx 파일을 드래그 해서 포토샵 바탕위치로 드롭하면 스크립트가 자동으로 실행이 되며 이미지가 저장이 됩니다. (PSD 이미지 위가 아닙니다. 포토샵의 검정색 배경 부분에 가져다 놓으셔야 합니다)

layerexporter.jsx
0.00MB

 

2019-09-10 내용을 추가합니다. 레이어 저장시 레이어의 크기로 저장되도록 기능 추가

아래 포스트에서 확인 하시면 됩니다. 거의 비슷한데요. 레이어별 크기로 저장을 하거나 기존 도큐먼트 사이즈로 저장할 수도 있습니다.

https://diy-dev-design.tistory.com/72

 

[포토샵스크립트] PSD 모든 레이어 자동 저장, 하위 폴더 포함 (레이어 크기로 이미지 저장)

안녕하세요. 제가 포토샵 스크립트를 이용하여 PSD 파일내의 모든 레이어를 자동으로 하위폴더 구조를 유지하며 저장할 수 있는 스크립트를 만들어서 올렸었는데요. 바로 아래 링크에서요. https://diy-dev-design..

diy-dev-design.tistory.com

뎃글, 공감 은 블로그 작성자에게 큰 힘이 된답니다. 
도움이 되었다 생각되시면 클릭!!  부탁드려요~

 

궁금하신 부분이 있다면 뎃글로 문의 해 주세요~

반응형

+ Recent posts