9. image 다루기
.NET Framework에서 Image를 다루기 위한 것으로 System.Drawing.Image를 사용할 수 있었습니다. 그러나 .NET Core 1.0이 개발되기 시작한 후부터는 더 이상 System.Drawing.Image를 사용할 수 없게 되었고 마이크로소프트는 System.Drawing은 더이상 지원되지 않을 것이며 비 크로스 플랫폼에 해당하므로 사용하지 말 것을 권고하고 있습니다.
대신 이를 대체할 수 있는 다른 대안으로 ImageSharp이나 SkiaSharp을 사용할 수 있습니다. 여기서는 이 중에서 ImageSharp을 사용해 Image를 다루는 방법에 간단히 알아보고자 합니다. ImageSharp은 2D graphics을 위한 third-party cross-platform 라이브러리이며 기존 System.Drawing을 대체할 목적으로 시작된 프로젝트입니다.
우선 패키지 참조를 위해 프로젝트 파일(csproj)을 수정하여 아래와 같이 Package를 추가합니다.
<ItemGroup>
<PackageReference Include="SixLabors.ImageSharp" Version="2.1.2" />
</ItemGroup>
그러면 프로젝트는 복구를 통해 해당 Package를 자동으로 참조하게 됩니다.
이제 소스에서 아래 2개의 Namespace를 추가하고
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Processing;
아래 예제를 작성합니다. 예제는 Resize를 통해 기존 이미지를 읽어 크기를 줄이고 Graycale로 흑백 화한 thumbnail이미지를 생성하도록 합니다.
IEnumerable<string> images = Directory.EnumerateFiles(@"C:\Users\Administrator\Pictures");
foreach (string imagePath in images.Where(x => x.Contains("jpg")))
{
string thumbnailPath = Path.Combine(Path.GetDirectoryName(imagePath) ?? string.Empty, Path.GetFileNameWithoutExtension(imagePath) + "-thumbnail" + Path.GetExtension(imagePath));
using (Image image = Image.Load(imagePath))
{
image.Mutate(x => x.Resize(image.Width / 10, image.Height / 10));
image.Mutate(x => x.Grayscale());
image.Save(thumbnailPath);
Console.WriteLine(thumbnailPath);
}
}
Console.WriteLine("썸네일 생성 완료");
참고로 ImageSharp은 Web상에서 이미지를 그리고 다룰 수 있는 아래의 Package 또한 배포되고 있습니다.
SixLabors.ImageSharp.Drawing
SixLabors.ImageSharp.Web
10. Code의 국제화(globalization)와 현지화(localization)
국제화는 전 세계 어디서든 프로그램이 정확하게 실행될 수 있도록 하는 것이며 크게 globalization과 localization 이 2개로 나누어 볼 수 있습니다.
globalization은 여러 언어와 지역의 조합을 수용하기 위해 Code를 작성하는 것을 말합니다. 문화권(culture)으로도 표현하는 언어와 지역은 globalization에서 둘 다 중요한 요소로 작용될 수 있습니다. 퀘벡과 파리는 같은 프랑스어를 사용하지만 통화나 시간의 형식이 각각 다른 것처럼 같은 언어이면서 다른 지역화를 이루는 경우가 많기 때문입니다.
이렇듯 다양한 언어와 지역의 조합을 나타내기 위한 Code로 ISO(International Organization for Standardization)코드를 사용하기도 합니다. ISO는 예를 들어 ko-KR이라는 코드가 있으면 이는 한국어와 대한민국이라는 지역을 표현한 것이며 en-US는 영어라는 언어와 미국이라는 지역을 나타내는 것입니다.
Localization은 사용자 인터페이스에서 특정 언어를 지원하기 위한 customizing을 의미합니다. 예를 들어 특정 App이 한국어에 맞춰진 시스템에서 동작하는 경우라면 '한국어'를 영어로 맞춰진 시스템에서 동작하는 경우라면 '영어'로 App의 언어가 표시되게끔 하는 것입니다.
● 현재 문화권 확인하고 변경하기
globalization이나 Localization에 관한 정보는 System.Globalization의 CultureInfo를 통해 확인할 수 있습니다.
using System;
using System.Globalization;
namespace myapp
{
class Program
{
static void Main(string[] args)
{
CultureInfo globalization = CultureInfo.CurrentCulture;
CultureInfo localization = CultureInfo.CurrentUICulture;
Console.WriteLine($"globalization : {globalization.Name} - {globalization.DisplayName}");
Console.WriteLine($"localization : {localization.Name} - {localization.DisplayName}");
//globalization : ko-KR - Korean (Korea)
//localization : en-US - English (United States)
}
}
}
예제에서 결과는 globalization은 ko-KR로 localization은 en-US로 표시되었습니다. 이는 현재 시스템의 지역화가 '대한민국'으로 설정되어 있지만 실제 표시되는 언어는 '영어'로 되어 있음을 뜻합니다.
만약 프로그램에서 globalization이나 localization의 설정을 변경하는 경우라면 ISO code를 사용해 변경을 시도해야 합니다.
string newCulture = "fr-CA"; //프랑스어, 캐나다
CultureInfo ci = new(newCulture);
CultureInfo.CurrentCulture = ci; //globalization변경
CultureInfo.CurrentUICulture = ci; //localization변경
'.NET' 카테고리의 다른 글
[.NET] C#과 NET의 프로젝트 유형 - 2. ASP.NET Core와 Windows 전용 Desktop App (0) | 2022.07.20 |
---|---|
[.NET] C#과 NET의 프로젝트 유형 - 1. App Model (0) | 2022.07.20 |
[.NET] 닷넷 Type 사용하기 - 7. reflection 과 attributes (0) | 2022.06.26 |
[.NET] 닷넷 Type 사용하기 - 6. 네트워크 리소스 활용 (0) | 2022.06.26 |
[.NET] 닷넷 Type 사용하기 - 5. index와 range 그리고 Span (0) | 2022.06.26 |