Às vezes temos a necessidade de criar uma imagem combinando várias imagens JPG. Este artigo explica como fazer isso em C#.

API de imagem C# – Download grátis

Aspose.Imaging for .NET fornece várias rotinas flexíveis para criar e manipular imagens em aplicativos .NET. Ele permite combinar arquivos JPG em algumas linhas de código. Você pode instalá-lo em seu aplicativo .NET usando a DLL da API NuGet ou download.

Install-Package Aspose.Imaging

Mesclar imagens JPG horizontalmente em C#

A seguir estão as etapas para mesclar imagens JPEG horizontalmente em C#.

  • Crie uma matriz de imagens JPEG que você deseja mesclar.
  • Calcule a largura da imagem resultante adicionando a largura de todas as imagens na matriz e a altura encontrando a altura máxima de uma imagem na matriz.
  • Crie uma nova imagem usando a classe JpegImage e defina sua largura e altura para a calculada na última etapa.
  • Itere sobre a matriz de imagens (que você deseja mesclar) e execute as seguintes tarefas em cada imagem:
    • Carregue pixels de uma imagem usando o método LoadArgb32Pixels e salve-os na imagem resultante usando o método SaveArgb32Pixels. Este método também recebe um objeto Rectangle como um argumento que define a posição de uma imagem na imagem resultante.
  • Salve a imagem resultante como uma imagem JPEG.

O exemplo de código a seguir mostra como unir imagens JPEG horizontalmente em C#.

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Aspose.Imaging;
using Aspose.Imaging.FileFormats.Jpeg;
using Aspose.Imaging.ImageOptions;
using Aspose.Imaging.Sources;

// Matriz de imagens que você deseja mesclar.
string[] imagePaths = { "Image1.jpeg", "Image2.jpg" };

// Nome do arquivo de saída/resultado.
string outputPath = "MergeImages_Horizontally.jpg";

// Obtendo 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);
    }
}

// Largura e altura da imagem resultante
int newWidth = imageSizes.Sum(size => size.Width);
int newHeight = imageSizes.Max(size => size.Height);

// Mesclando imagens em uma.
Source tempFileSource = new FileCreateSource("temp.jpg", isTemporal: true);
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);
}

Inserir imagens

First Image
Second Image

Imagem de saída

Horizontally Merged Image

Mesclar imagens JPG verticalmente em C#

As etapas para mesclar imagens JPEG verticalmente são as mesmas acima. Uma pequena diferença é que calculamos a altura da imagem resultante adicionando a altura de todas as imagens na matriz e a largura encontrando a largura máxima de uma imagem na matriz. O exemplo de código a seguir mostra como unir imagens JPEG verticalmente em C#.

// Uma matriz de imagens que você deseja mesclar
string[] imagePaths = { "Image1.jpeg", "Image2.jpg" };

string outputPath = "MergeImages_Vertically.jpg";

// Obtendo 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);
    }
}

// Largura e Altura da imagem resultante
int newWidth = imageSizes.Max(size => size.Width);
int newHeight = imageSizes.Sum(size => size.Height);

// Mesclando imagens em uma.
using (MemoryStream memoryStream = new MemoryStream())
{
    StreamSource outputStreamSource = new StreamSource(memoryStream);
    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(outputPath);
    }
}
Vertically Merged Image

Mesclar imagens JPG em PDF em C

Você pode precisar combinar as imagens JPEG em PDF. Você pode fazer isso apenas fazendo uma pequena alteração no método Image.Save (use a extensão .pdf em vez de .jpg).

// Uma matriz de imagens que você deseja mesclar.
string[] imagePaths = { "Image1.jpeg", "Image2.jpg" };

string outputPath = "MergeHorizontalAsPDF";
string tempFilePath = "temp.jpg";

// Obtendo 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);
    }
}

// Largura e altura da imagem resultante.
int newWidth = imageSizes.Sum(size => size.Width);
int newHeight = imageSizes.Max(size => size.Height);

// Mesclando imagens em uma.
Source tempFileSource = new FileCreateSource(tempFilePath, isTemporal: true);
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 + ".pdf", new PdfOptions());
}

Mesclar imagens JPG em PNG em C

Da mesma forma, você pode combinar as imagens JPEG em PNG. Como mostrado acima, você só precisa usar a extensão .png em vez de .jpg no método Image.Save.

// Uma matriz de imagens que você deseja mesclar.
string[] imagePaths = { "Image1.jpeg", "Image2.jpg" };

string outputPath = "MergeHorizontalAsPNG";

// Obtendo 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);
    }
}

// Largura e altura da imagem resultante.
int newWidth = imageSizes.Sum(size => size.Width);
int newHeight = imageSizes.Max(size => size.Height);

// Mesclando imagens em uma e salve como PNG
using (MemoryStream memoryStream = new MemoryStream())
{
    StreamSource outputStreamSource = new StreamSource(memoryStream);
    JpegOptions options = new JpegOptions() { Source = outputStreamSource, 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 + ".png", new PngOptions());
    }
}

Conclusão

Neste artigo, você aprendeu como unir imagens JPEG em C#. Você pode combiná-los horizontalmente ou verticalmente. Você também aprendeu como salvar a imagem mesclada como PDF ou PNG. Para obter mais informações, consulte a documentação do Aspose.Imaging para .NET. Se você tiver alguma dúvida, não hesite em nos contatar em nosso Fórum de Suporte.

Veja também