반응형

포토샵 없이 이미지를 편집하는 방법이 없을까 고민하다가 알게된 라이브러리, 바로 ImageMagick 입니다.

먼저 포스트에서 ImageMagick 을 프로젝트에 가져오는 방법을 아래와 같이 소개해 드린적이 있습니다. 

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

 

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

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

diy-dev-design.tistory.com

 

오늘은 실제 ImageMagick 라이브러리를 이용하여 이미지를 컨트롤 하는 방법을 소개해 드릴 까 합니다.

오늘 컨트롤 해볼 이미지의 속성은 리사이즈, 밝기 조정, 채도 조절, 그리고 이미지의 출력 레벨 조정 입니다.

 

일반 적으로 상단 지시문에 using imageMagick 을 선언해 주었다면 본문에서는 바로 아래와 같이 사용하면 됩니다,

// 파일 오픈 다이얼로그를 통하여 이미지를 열어서 picture box 에 표시하는 방법

openFileDialog1.ShowDialog(); // 이미지 파일을 선택
MagickImage mimg = new MagickImage(openFileDialog1.FileName); //매직 이미지로 열기
pictureBox1.Image = mimg.ToBitmap(); // pivture box 에 이미지 표시하기

기본적인 사용 방법은 위와 같이 MagickImage 개체를 선언해 준 뒤 이미지 파일을 열어주면 됩니다.

그럼 MagickImage 로 지정한 mimg 라는 변수에 각종 ImageMagick 에서 지원하는 기능을 사용할 수 있습니다.

위의 예제는 간단하게 MagickImage 로 불러들인 이미지를 이용하여 picturebox 에 그림을 표시하는 예제가 되겠습니다. 

picturebox 에 표시된 그림

 

ImageMagick 을 이용하여 이미지 크기를 변경하려면?

mimg = new MagickImage(openFileDialog1.FileName);

mimg.Resize(new Percentage(50));

또는
mimg.Resize(new Percentage(50), new Percentage(25));

또는
mimg.Resize(int TargetWidth, int TargetHeight);

 같이 적용하면 됩니다. 비율을 유지하며 변경도 가능하고 각각도 조정이 가능합니다. 변경하는 몇가지 방법이 있습니다. 위와 같이 퍼센테이지로 지정하는 것과 타겟 이미지의 가로, 세로 크기를 직접 설정하여 변환하는 방법을 사용하시면 되는데요. 일반적으로는 퍼센테이지로 변환하는 것이 편리하죠.

물론 지정된 타겟 크기가 있다면 해당 크기로 바로 변환하는것도 가능합니다.

 

이미지 크기를 변경할 때 리사이즈 필터 (안티알리아싱, 선명도 등을 조절) 를 설정하려면??

mimg = new MagickImage(openFileDialog1.FileName);

mimg.FilterType = FilterType.Mitchell;

mimg.Resize(new Percentage(50));

/*
필터 종류들
Point = 1,  Box = 2, Triangle = 3, Hermite = 4, Hann = 5, Hamming = 6, 
Blackman = 7, Gaussian = 8, Quadratic = 9,  Cubic = 10,  Catrom = 11, 
Mitchell = 12,  Jinc = 13, Sinc = 14, SincFast = 15, Kaiser = 16, 
Welch = 17, Parzen = 18, Bohman = 19, Bartlett = 20, Lagrange = 21, Lanczos = 22, 
LanczosSharp = 23, Lanczos2 = 24, Lanczos2Sharp = 25, Robidoux = 26,  
RobidouxSharp = 27, Cosine = 28, Spline = 29, LanczosRadius = 30, CubicSpline = 31

*/

FilterType.Mitchell 부분이 필터를 지정하는 부분인데요. 많은 종류의 필터를 제공하고 있으므로 필요에 따라 적정한 필터를 지정하여 변환에 사용하시면 좋을 것 같습니다. 각각의 필터에 따른 결과의 차이에 대하여도 나중에 한번 분석을 해봐와야 겠습니다. 

 

 

 

 

ImageMagick 을 이용하여 그림의 밝기/채도/대비를 변경하려면?

우선 밝기를 조정하는 방법을 보면 간단하게 아래와 같은 방식으로 가능합니다.

//MagickImage.InverseLevel(max, min)
mImg.InverseLevel(new Percentage(100), new Percentage(0));
// 앞의 것을 내리면 전체적으로 어두워지고, 뒤의 것을 올리면 전체적으로 밝아진다.

InverseLevel 은 포토샵의 Level 과 같은 기능을 수행합니다.

여기서 InverseLevel 의 특성을 아는 것이 중요합니다. 기본적으로 ImageMagick 에서 Level 이라는 밝기 조정을 위한 명령이 존재하지만 제가 InverseLevel 을 사용한 이유는 그림의 전체 밝기, 어둡기를 컨트롤 하고 싶은데 Level 은 그렇지가 않은 결과를 가져다 줍니다. 어디까지를 블랙으로 볼 것이냐를 결정하는 듯한 변화인데요, 아래 그림으로 보시면 이해가 빠르실 거라 생각됩니다.

Level ( blackPointPercentage , whitePointPercentage)

MagickImage.Level (0%, 10%)
MagickImage.Level (0%, 10%)

물론 둘다 100 또는 둘다 0 이 입력되면 완전 흰색/ 검은색으로 표시됩니다.

 

자 그럼 InverseLevel 로 변경한 그림을 볼까요??

InverseLevel( blackPointPercentage , whitePointPercentage)

MagickImage.InverseLevel(90%, 100%)
MagickImage.InverseLevel(0%, 10%)

 

어떠신가요? 일반적인 우리가 생각하는 밝기를 변화하는 방법이랑 좀더 비슷한것 같지않으신가요? 물론 필요에 따라 위의 방법과 아래의 방법을 잘 조합하여 사용하는 것이 필요하겠으나 차이가 있음을 알려드리고자 올렸습니다.

 

그외에도 채도, 콘트라스트 등을 변경하는 것도 위와 크게 차이는 없습니다. 

채도조정 : MagickImage.Modulate( brightness, saturation) 
콘트라스트 : MagickImage.BrightnessContrast( brightness, contrast)

채도와 콘트라스트 조정시에도 밝기를 함께 조절할 수 있지만 저는 각각의 요소를 개별로 컨트롤하는 것이 편리하여 위의 두가지에서 brightness 는 100을 그냥 적용하고 InverseLevel 까지 포함하여 3개의 명령을 각각 사용합니다. 

 

이상으로 간단하게 ImageMagick 을 이용하여 이미지를 컨트롤 하는 예제를 설명 드렸습니다. 

이미지 합성, 레이어링, 알파채널 등의 좀 더 복잡하고 다양한 예제는 다음 강좌에서 소개해 드리도록 하겠습니다.

감사합니다.

 

뎃글, 공감 은 블로그 작성자에게 큰 힘이 된답니다. 

 

2020/07/29 - [DEV/c#] - [C#] 설정 저장하고 재실행 시 저장한 값 불러오기

 

[C#] 설정 저장하고 재실행 시 저장한 값 불러오기

오늘 소개해 드릴 포스팅은 C# 에서 어플리케이션을 만들때 디렉토리 입력창이나 각종 설정들에 대하여 마지막으로 실행했던 설정이 다음번에 다시 실행했을 때 남아있도록 해주는

diy-dev-design.tistory.com

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

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

 

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

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

diy-dev-design.tistory.com

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

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

 

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

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

diy-dev-design.tistory.com

 

반응형

+ Recent posts