반응형

 

오늘은 간단하게 주어진 경로가 폴더인지 파일인지 구분하는 방법을 소개해 드리겠습니다.

길게 설명할 것 없이 간단하게 코드나갑니다.

 

FileAttributes chkAtt = File.GetAttributes(_path);
if ((chkAtt & FileAttributes.Directory) == FileAttributes.Directory)
{
 // 디렉토리일 경우
}
else
{
 // 파일 일 경우
}

 

간단하죠 ?

이렇게 하면  _path 로 주어진 경로가 디렉토리인지 파일인지 구분할 수 있는데요. 폴더를 계속해서 탐색하는 기능을 만들때 유용하게 사용할 수 있답니다.

 

 

예를 들면 아래와 같은 방법으로 하위폴더의 모든 파일에 대한 액션을 할 수 있는 재귀 함수를 만들수 있는 것입니다.

private static void chkDir_recursive (string _path)
{

  FileAttributes chkatt = File.GetAttributes(_path);
  if ((chkatt & FileAttributes.Directory) == FileAttributes.Directory)
  {
    // is a Directories
    string[] tmpPath = Directory.GetDirectories(_path, "*");

    foreach (string s in tmpPath)
    {
    	chkDir_recursive(_path); // 폴더를 만나면 하위로 계속 탐색을 진행
    }

    string[] tmpFiles = Directory.GetFiles(_path, "*.*");

    foreach (string s in tmpFiles)
    {
    	chkDir_recursive(_path); // 파일을 만나도 동일한 함수로 실행 가능함
    }
  }
  else
  {    
    // 파일을 만나게 되면 실제 해야할 액션을 코딩한다

  }

}

 

간단하죠?

 

이상으로 주어진 경로가 폴더인지 파일인지 구분하는 방법을 소개해 드렸습니다~

2020/05/29 - [DEV/c#] - [C#] .net 프로그램에서 MD5 해시 체크파일 만들기

 

[C#] .net 프로그램에서 MD5 해시 체크파일 만들기

프로그래밍을 이용하여 파일을 생성하거나 이동시킬때 md5 와 같은 무결성 검증을 위한 해시체크 파일을 생성해야 할때가 있습니다. 물론 간단한 유틸리티를 내려받아 윈도우 쉘 명령어로 만드�

diy-dev-design.tistory.com

2020/01/03 - [DEV/c#] - [C#] C# APP 에서 엑셀 연동해보기

 

[C#] C# APP 에서 엑셀 연동해보기

엑셀에서 VBA 로 코드를 짜다 보면 막상 특정 엑셀 파일에만 VBA 가 적용이 가능하기 때문에 막상 다른 엑셀 파일에서 동일한 동작을 하려면 또 코드를 복사해 넣고 실행을 해야 하는 경우가 있습�

diy-dev-design.tistory.com

2019/06/21 - [DEV/c#] - [C#] C# .NET 프로젝트에서 ImageMagick 이용하기

 

[C#] C# .NET 프로젝트에서 ImageMagick 이용하기

이미지 관련된 툴을 개발함에 있어 다양한 이미지 포멧을 만들고 변경하기 위한 코어를 개발하는 것은 말도 안되게 힘든 작업입니다. 저는 디자이너라는 타이틀을 가지고 있기 때문에 포토샵이

diy-dev-design.tistory.com

2019/06/21 - [DEV/c#] - [C#] 마우스 매크로를 위한 마우스 자동 클릭 기능 만들기

 

[C#] 마우스 매크로를 위한 마우스 자동 클릭 기능 만들기

사용자의 마우스 컨트롤 없이 자동으로 지정된 위치에서 마우스를 클릭하게 만들어 주는 기능 입니다. 먼저 아래와 같이 DLL 을 불러들여 주어야 하겠습니다. class 정의 바로 아래부분에 넣어 주�

diy-dev-design.tistory.com

2019/06/21 - [DEV/c#] - [C#] Delay 기능

 

[C#] Delay 기능

c# .net 환경 개발시 아래의 함수를 이용하여 Delay 를 구현할 수 있습니다. private static DateTime Delay(int MS) { DateTime ThisMoment = DateTime.Now; TimeSpan duration = new TimeSpan(0, 0, 0, 0, MS);..

diy-dev-design.tistory.com

 

반응형
반응형

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

 

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