포토샵 없이 이미지를 편집하는 방법이 없을까 고민하다가 알게된 라이브러리, 바로 ImageMagick 입니다.
먼저 포스트에서 ImageMagick 을 프로젝트에 가져오는 방법을 아래와 같이 소개해 드린적이 있습니다.
2019/06/21 - [DEV/c#] - [C#] C# .NET 프로젝트에서 ImageMagick 이용하기
오늘은 실제 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 에 그림을 표시하는 예제가 되겠습니다.
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)
물론 둘다 100 또는 둘다 0 이 입력되면 완전 흰색/ 검은색으로 표시됩니다.
자 그럼 InverseLevel 로 변경한 그림을 볼까요??
InverseLevel( blackPointPercentage , whitePointPercentage)
어떠신가요? 일반적인 우리가 생각하는 밝기를 변화하는 방법이랑 좀더 비슷한것 같지않으신가요? 물론 필요에 따라 위의 방법과 아래의 방법을 잘 조합하여 사용하는 것이 필요하겠으나 차이가 있음을 알려드리고자 올렸습니다.
그외에도 채도, 콘트라스트 등을 변경하는 것도 위와 크게 차이는 없습니다.
채도조정 : MagickImage.Modulate( brightness, saturation)
콘트라스트 : MagickImage.BrightnessContrast( brightness, contrast)
채도와 콘트라스트 조정시에도 밝기를 함께 조절할 수 있지만 저는 각각의 요소를 개별로 컨트롤하는 것이 편리하여 위의 두가지에서 brightness 는 100을 그냥 적용하고 InverseLevel 까지 포함하여 3개의 명령을 각각 사용합니다.
이상으로 간단하게 ImageMagick 을 이용하여 이미지를 컨트롤 하는 예제를 설명 드렸습니다.
이미지 합성, 레이어링, 알파채널 등의 좀 더 복잡하고 다양한 예제는 다음 강좌에서 소개해 드리도록 하겠습니다.
감사합니다.
뎃글, 공감 은 블로그 작성자에게 큰 힘이 된답니다. |
2020/07/29 - [DEV/c#] - [C#] 설정 저장하고 재실행 시 저장한 값 불러오기
2020/01/03 - [DEV/c#] - [C#] C# APP 에서 엑셀 연동해보기
2019/06/21 - [DEV/c#] - [C#] C# .NET 프로젝트에서 ImageMagick 이용하기
2019/06/21 - [DEV/c#] - [C#] Delay 기능
2019/06/21 - [DEV/c#] - [C#] 마우스 매크로를 위한 마우스 자동 클릭 기능 만들기
'DEV > c#' 카테고리의 다른 글
[C#] .net 프로그램에서 MD5 해시 체크파일 만들기 (0) | 2020.05.29 |
---|---|
[c#] 주어진 경로가 디렉토리인지 파일인지 확인하는 방법 (0) | 2020.05.28 |
재택근무 필수 유틸 "자리안비움" - 윈도우 꺼짐 방지 (81) | 2020.03.09 |
Excel Automate, 엑셀 자동화 프로그램 (54) | 2020.01.08 |
[C#] C# APP 에서 엑셀 연동해보기 (2) | 2020.01.03 |