C#에서 이미지 병합

이 기사에서는 C#을 사용하여 프로그래밍 방식으로 여러 이미지를 단일 이미지로 병합하거나 결합하는 방법을 배웁니다. 단계별 가이드와 코드 샘플은 이미지를 수평 또는 수직으로 병합하는 방법을 보여줍니다.

이미지 병합을 위한 C# API

여러 이미지를 단일 이미지로 병합하기 위해 Aspose.Imaging for .NET을 사용합니다. 다양한 이미지 형식을 조작할 수 있는 강력하고 기능이 풍부한 이미지 처리 API입니다. API를 다운로드하거나 NuGet을 사용하여 설치할 수 있습니다.

PM> Install-Package Aspose.Imaging

C#을 사용하여 여러 이미지 병합

이미지를 하나의 이미지로 병합하는 방법에는 세로 및 가로의 두 가지가 있습니다. 전자는 이미지를 세로로 합치는 방식이고, 후자는 가로로 합치는 방식이다. 다음 섹션에서는 코드 샘플을 사용하여 두 가지 방법을 모두 학습합니다.

수직으로 이미지 병합

다음은 C#을 사용하여 이미지를 세로로 병합하는 단계입니다.

  • 먼저 string형 배열에서 이미지의 경로를 지정합니다.
  • 그런 다음 크기의 목록을 만들고 각 이미지의 크기를 저장합니다.
  • 결과 이미지의 높이와 너비를 계산합니다.
  • StreamSource 클래스의 객체를 생성하고 새로운 MemoryStream로 초기화합니다.
  • JpegOptions 클래스의 객체를 생성하고 해당 옵션을 설정합니다.
  • 새 이미지에 대한 JpegImage 클래스를 인스턴스화하고 JpegOptions 및 계산된 높이 및 너비로 초기화합니다.
  • 이미지 목록을 반복하고 각 반복에서 이미지를 RasterImage 개체에 로드합니다.
  • 각 이미지에 대해 Rectangle을 만들고 JpegImage.SaveArgb32Pixels() 메서드를 사용하여 새 이미지에 추가합니다.
  • 각 반복에서 스티치 높이를 늘립니다.
  • 마지막으로 JpegImage.Save(string) 메서드를 사용하여 새 이미지를 저장합니다.

다음 코드 샘플은 이미지를 세로로 병합하는 방법을 보여줍니다.

// 이미지 목록 만들기
string[] imagePaths = { "image1.jpg", "image2.jpg", "image3.jpg", "image4.jpg", "image5.png" };

// 결과 이미지의 크기 가져오기
List<Size> imageSizes = new List<Size>();
foreach (string imagePath in imagePaths)
{
    using (RasterImage image = (RasterImage)Image.Load(imagePath))
    {
        imageSizes.Add(image.Size);
    }
}

int newWidth = imageSizes.Max(size => size.Width);
int newHeight = imageSizes.Sum(size => size.Height);

// 이미지를 새 이미지로 결합
using (MemoryStream memoryStream = new MemoryStream())
{
    // 출력 소스 만들기
    StreamSource outputStreamSource = new StreamSource(memoryStream);
    
    // jpeg 옵션 생성
    JpegOptions options = new JpegOptions() { Source = outputStreamSource, Quality = 100 };
    
    // 출력 이미지 생성
    using (JpegImage newImage = (JpegImage)Image.Create(options, newWidth, newHeight))
    {
        int stitchedHeight = 0;
        // 이미지 병합
        foreach (string imagePath in imagePaths)
        {
            using (RasterImage image = (RasterImage)Image.Load(imagePath))
            {
                Rectangle bounds = new Rectangle(0, stitchedHeight, image.Width, image.Height);
                newImage.SaveArgb32Pixels(bounds, image.LoadArgb32Pixels(image.Bounds));
                stitchedHeight += image.Height;
            }
        }
        
        // 병합된 이미지 저장
        newImage.Save("merged-image.jpg");
    }
}

이미지를 수평으로 병합

다음은 C#을 사용하여 이미지를 가로로 결합하는 단계입니다.

  • 먼저 string형 배열에서 이미지의 경로를 지정합니다.
  • 그런 다음 크기의 목록을 만들고 각 이미지의 크기를 저장합니다.
  • 결과 이미지의 높이와 너비를 계산합니다.
  • FileCreateSource(String, Boolean)를 이용하여 새로운 소스를 생성하고 파일의 경로로 초기화한다.
  • JpegOptions 클래스의 객체를 생성하고 해당 옵션을 설정합니다.
  • 새 이미지에 대한 JpegImage 클래스를 인스턴스화하고 JpegOptions 및 계산된 높이 및 너비로 초기화합니다.
  • 이미지 목록을 반복하고 각 반복에서 이미지를 RasterImage 개체에 로드합니다.
  • 각 이미지에 대해 Rectangle을 만들고 JpegImage.SaveArgb32Pixels() 메서드를 사용하여 새 이미지에 추가합니다.
  • 각 반복에서 스티치 너비를 늘립니다.
  • 완료되면 JpegImage.Save(string) 메서드를 사용하여 새 이미지를 저장합니다.

다음 코드 샘플은 여러 이미지를 가로로 병합하는 방법을 보여줍니다.

// 이미지 목록 만들기
string[] imagePaths = { "image1.jpg", "image2.jpg", "image3.jpg", "image4.JPG", "image5.png" };

// 임시 이미지를 만들려면
string tempFilePath = "temp.jpg";

// 결과 이미지의 크기 가져오기
List <Size> imageSizes = new List<Size>();
foreach (string imagePath in imagePaths)
{
    using (RasterImage image = (RasterImage)Image.Load(imagePath))
    {
        imageSizes.Add(image.Size);
    }
}

int newWidth = imageSizes.Sum(size => size.Width);
int newHeight = imageSizes.Max(size => size.Height);

// 이미지를 새 이미지로 결합
Source tempFileSource = new FileCreateSource(tempFilePath, isTemporal: true);

// jpeg 옵션 생성
JpegOptions options = new JpegOptions() { Source = tempFileSource, Quality = 100 };
using (JpegImage newImage = (JpegImage)Image.Create(options, newWidth, newHeight))
{
    int stitchedWidth = 0;
    
    // 이미지 병합
    foreach (string imagePath in imagePaths)
    {
        using (RasterImage image = (RasterImage)Image.Load(imagePath))
        {
            Rectangle bounds = new Rectangle(stitchedWidth, 0, image.Width, image.Height);
            newImage.SaveArgb32Pixels(bounds, image.LoadArgb32Pixels(image.Bounds));
            stitchedWidth += image.Width;
        }
    }
    
    // 병합된 이미지 저장
    newImage.Save(outputPath);
}

무료 API 라이선스 받기

평가 제한 없이 API를 사용하기 위해 임시 무료 라이선스 받기를 할 수 있습니다.

결론

이 문서에서는 C#을 사용하여 여러 이미지를 단일 이미지로 병합하는 방법을 배웠습니다. 코드 샘플은 이미지를 수직 및 수평으로 결합하는 방법을 보여주었습니다. 문서를 사용하여 .NET 이미지 처리 API에 대해 자세히 알아볼 수 있습니다. 또한 포럼을 통해 질문을 공유할 수 있습니다.

또한보십시오

정보: Aspose는 무료 콜라주 웹 앱을 제공합니다. 이 온라인 서비스를 사용하여 JPG를 JPG로 또는 PNG를 PNG로 이미지를 병합하고 사진 격자 등을 만들 수 있습니다.