Mesclar imagens em C#

Neste artigo, você aprenderá a mesclar ou combinar várias imagens em uma única imagem programaticamente usando C#. O guia passo a passo e os exemplos de código demonstrarão como mesclar imagens horizontalmente ou verticalmente.

API C# para mesclar imagens

Para mesclar várias imagens em uma única imagem, usaremos Aspose.Imaging for .NET. É uma API de processamento de imagem poderosa e rica em recursos que permite manipular uma ampla variedade de formatos de imagem. Você pode baixar a API ou instalá-la usando NuGet.

PM> Install-Package Aspose.Imaging

Mesclar várias imagens usando C#

Existem duas maneiras de mesclar imagens em uma única: verticalmente e horizontalmente. No primeiro método, as imagens são anexadas umas às outras verticalmente, enquanto, no segundo, as imagens são combinadas uma após a outra horizontalmente. Nas seções a seguir, você aprenderá os dois métodos com exemplos de código.

Mesclar imagens verticalmente

A seguir estão as etapas para mesclar imagens verticalmente usando C#.

  • Primeiro, especifique os caminhos das imagens em uma matriz de strings.
  • Em seguida, crie uma Lista de Tamanho e armazene o tamanho de cada imagem nela.
  • Calcule a altura e a largura da imagem resultante.
  • Crie um objeto da classe StreamSource e inicialize-o com um novo MemoryStream.
  • Crie um objeto da classe JpegOptions e defina suas opções.
  • Instancie a classe JpegImage para a nova imagem e inicialize-a com JpegOptions e altura e largura calculadas.
  • Percorra a lista de imagens e em cada iteração, carregue a imagem em um objeto RasterImage.
  • Crie um Retângulo para cada imagem e adicione-o à nova imagem usando o método JpegImage.SaveArgb32Pixels().
  • Aumente a altura costurada em cada iteração.
  • Finalmente, salve a nova imagem usando o método JpegImage.Save(string).

O exemplo de código a seguir mostra como mesclar imagens verticalmente.

// Crie uma lista de imagens
string[] imagePaths = { "image1.jpg", "image2.jpg", "image3.jpg", "image4.jpg", "image5.png" };

// Obtenha o tamanho da imagem resultante
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);

// Combine imagens em uma nova
using (MemoryStream memoryStream = new MemoryStream())
{
    // Criar fonte de saída
    StreamSource outputStreamSource = new StreamSource(memoryStream);
    
    // Criar opções de jpeg
    JpegOptions options = new JpegOptions() { Source = outputStreamSource, Quality = 100 };
    
    // Criar imagem de saída
    using (JpegImage newImage = (JpegImage)Image.Create(options, newWidth, newHeight))
    {
        int stitchedHeight = 0;
        // Mesclar imagens
        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;
            }
        }
        
        // Salve a imagem mesclada
        newImage.Save("merged-image.jpg");
    }
}

Mesclar imagens horizontalmente

A seguir estão as etapas para combinar imagens horizontalmente usando C#.

  • Primeiro, especifique os caminhos das imagens em uma matriz de strings.
  • Em seguida, crie uma Lista de Tamanho e armazene o tamanho de cada imagem nela.
  • Calcule a altura e a largura da imagem resultante.
  • Crie uma nova fonte usando FileCreateSource(String, Boolean) e inicialize-a com o caminho do arquivo.
  • Crie um objeto da classe JpegOptions e defina suas opções.
  • Instancie a classe JpegImage para a nova imagem e inicialize-a com JpegOptions e altura e largura calculadas.
  • Percorra a lista de imagens e em cada iteração, carregue a imagem em um objeto RasterImage.
  • Crie um Rectangle para cada imagem e adicione-o à nova imagem usando o método JpegImage.SaveArgb32Pixels().
  • Aumente a largura costurada em cada iteração.
  • Uma vez feito, salve a nova imagem usando o método JpegImage.Save(string).

O exemplo de código a seguir mostra como mesclar várias imagens horizontalmente.

// Criar lista de imagens
string[] imagePaths = { "image1.jpg", "image2.jpg", "image3.jpg", "image4.JPG", "image5.png" };

// Para criar uma imagem temporária
string tempFilePath = "temp.jpg";

// Obtenha o tamanho da imagem resultante
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);

// Combine imagens em uma nova
Source tempFileSource = new FileCreateSource(tempFilePath, isTemporal: true);

// Criar opções de jpeg
JpegOptions options = new JpegOptions() { Source = tempFileSource, Quality = 100 };
using (JpegImage newImage = (JpegImage)Image.Create(options, newWidth, newHeight))
{
    int stitchedWidth = 0;
    
    // Mesclar imagens
    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;
        }
    }
    
    // Salve a imagem mesclada
    newImage.Save(outputPath);
}

Obtenha uma licença de API gratuita

Você pode obter uma licença temporária gratuita para usar a API sem limitações de avaliação.

Conclusão

Neste artigo, você aprendeu como mesclar várias imagens em uma única imagem usando C#. Os exemplos de código demonstraram como combinar as imagens vertical e horizontalmente. Você pode explorar mais sobre a API de processamento de imagem .NET usando documentação. Além disso, você pode compartilhar suas dúvidas conosco através do nosso fórum.

Veja também

Informações: Aspose fornece um aplicativo web de colagem GRATUITO. Usando este serviço online, você pode mesclar imagens JPG para JPG ou PNG para PNG, criar grades de fotos e assim por diante.