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
- Converter imagens em escala de cinza em C#
- Adicionar marca d’água a imagens usando C#
- Compacte imagens PNG, JPEG e TIFF usando C#
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.