Combinar imágenes en C#

En este artículo, aprenderá a fusionar o combinar varias imágenes en una sola imagen mediante programación mediante C#. La guía paso a paso y los ejemplos de código demostrarán cómo fusionar imágenes horizontal o verticalmente.

API de C# para fusionar imágenes

Para fusionar múltiples imágenes en una sola imagen, usaremos Aspose.Imaging for .NET. Es una API de procesamiento de imágenes potente y rica en funciones que le permite manipular una amplia gama de formatos de imagen. Puede descargar la API o instalarla usando NuGet.

PM> Install-Package Aspose.Imaging

Combinar múltiples imágenes usando C#

Hay dos formas de fusionar imágenes en una sola: vertical y horizontal. En el primer método, las imágenes se agregan entre sí verticalmente, mientras que en el segundo, las imágenes se combinan una tras otra horizontalmente. En las siguientes secciones, aprenderá ambos métodos con ejemplos de código.

Combinar imágenes verticalmente

Los siguientes son los pasos para fusionar imágenes verticalmente usando C#.

  • Primero, especifique las rutas de las imágenes en una matriz de cadenas.
  • Luego, cree una Lista de Tamaño y almacene el tamaño de cada imagen en ella.
  • Calcule la altura y el ancho de la imagen resultante.
  • Cree un objeto de la clase StreamSource e inicialícelo con un nuevo MemoryStream.
  • Cree un objeto de la clase JpegOptions y establezca sus opciones.
  • Cree una instancia de la clase JpegImage para la nueva imagen e inicialícela con JpegOptions y calculó la altura y el ancho.
  • Repita la lista de imágenes y, en cada iteración, cargue la imagen en un objeto RasterImage.
  • Cree un Rectangle para cada imagen y agréguelo a la nueva imagen usando el método JpegImage.SaveArgb32Pixels().
  • Aumente la altura cosida en cada iteración.
  • Finalmente, guarde la nueva imagen usando el método JpegImage.Save(string).

El siguiente ejemplo de código muestra cómo fusionar imágenes verticalmente.

// Crear una lista de imágenes
string[] imagePaths = { "image1.jpg", "image2.jpg", "image3.jpg", "image4.jpg", "image5.png" };

// Obtener el tamaño de la imagen 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);

// Combinar imágenes en una nueva
using (MemoryStream memoryStream = new MemoryStream())
{
    // Crear fuente de salida
    StreamSource outputStreamSource = new StreamSource(memoryStream);
    
    // Crear opciones jpeg
    JpegOptions options = new JpegOptions() { Source = outputStreamSource, Quality = 100 };
    
    // Crear imagen de salida
    using (JpegImage newImage = (JpegImage)Image.Create(options, newWidth, newHeight))
    {
        int stitchedHeight = 0;
        // Combinar imágenes
        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;
            }
        }
        
        // Guardar la imagen fusionada
        newImage.Save("merged-image.jpg");
    }
}

Combinar imágenes horizontalmente

Los siguientes son los pasos para combinar imágenes horizontalmente usando C#.

  • Primero, especifique las rutas de las imágenes en una matriz de cadenas.
  • Luego, cree una Lista de Tamaño y almacene el tamaño de cada imagen en ella.
  • Calcule la altura y el ancho de la imagen resultante.
  • Cree una fuente nueva usando FileCreateSource(String, Boolean) e inicialícela con la ruta del archivo.
  • Cree un objeto de la clase JpegOptions y establezca sus opciones.
  • Cree una instancia de la clase JpegImage para la nueva imagen e inicialícela con JpegOptions y calculó la altura y el ancho.
  • Repita la lista de imágenes y, en cada iteración, cargue la imagen en un objeto RasterImage.
  • Cree un Rectangle para cada imagen y agréguelo a la nueva imagen usando el método JpegImage.SaveArgb32Pixels().
  • Aumente el ancho cosido en cada iteración.
  • Una vez hecho esto, guarde la nueva imagen usando el método JpegImage.Save(string).

El siguiente ejemplo de código muestra cómo fusionar varias imágenes horizontalmente.

// Crear lista de imágenes
string[] imagePaths = { "image1.jpg", "image2.jpg", "image3.jpg", "image4.JPG", "image5.png" };

// Para crear una imagen temporal
string tempFilePath = "temp.jpg";

// Obtener el tamaño de la imagen 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);

// Combinar imágenes en una nueva
Source tempFileSource = new FileCreateSource(tempFilePath, isTemporal: true);

// Crear opciones jpeg
JpegOptions options = new JpegOptions() { Source = tempFileSource, Quality = 100 };
using (JpegImage newImage = (JpegImage)Image.Create(options, newWidth, newHeight))
{
    int stitchedWidth = 0;
    
    // Combinar imágenes
    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;
        }
    }
    
    // Guardar la imagen fusionada
    newImage.Save(outputPath);
}

Obtenga una licencia de API gratuita

Puede obtener una licencia temporal gratuita para utilizar la API sin limitaciones de evaluación.

Conclusión

En este artículo, ha aprendido a fusionar varias imágenes en una sola imagen mediante C#. Los ejemplos de código han demostrado cómo combinar las imágenes vertical y horizontalmente. Puede explorar más sobre la API de procesamiento de imágenes de .NET utilizando documentación. Además, puede compartir sus consultas con nosotros a través de nuestro foro.

Ver también

Información: Aspose ofrece una aplicación web de collage GRATUITA. Con este servicio en línea, puede fusionar imágenes JPG a JPG o PNG a PNG, crear cuadrículas de fotos, etc.