A veces tenemos la necesidad de crear una imagen combinando varias imágenes JPG. Este artículo explica cómo hacer esto en C#.

API de imágenes de C#: descarga gratuita

Aspose.Imaging for .NET proporciona una serie de rutinas flexibles para crear y manipular imágenes dentro de las aplicaciones .NET. Te permite combinar archivos JPG en unas pocas líneas de código. Puede instalarlo dentro de su aplicación .NET usando NuGet o descargar DLL de la API.

Install-Package Aspose.Imaging

Combinar imágenes JPG horizontalmente en C#

Los siguientes son los pasos para fusionar imágenes JPEG horizontalmente en C#.

  • Cree una matriz de imágenes JPEG que desee fusionar.
  • Calcule el ancho de la imagen resultante sumando el ancho de todas las imágenes en la matriz y la altura encontrando la altura máxima de una imagen en la matriz.
  • Cree una nueva imagen utilizando la clase JpegImage y establezca su ancho y alto en el calculado en el último paso.
  • Repita la matriz de imágenes (que desea fusionar) y realice las siguientes tareas en cada imagen:
    • Cargue píxeles de una imagen usando el método LoadArgb32Pixels y guárdelos en la imagen resultante usando el método SaveArgb32Pixels. Este método también toma un objeto Rectangle como argumento que define la posición de una imagen en la imagen resultante.
  • Guarde la imagen resultante como una imagen JPEG.

El siguiente ejemplo de código muestra cómo unir imágenes JPEG horizontalmente en 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 imágenes que desea fusionar.
string[] imagePaths = { "Image1.jpeg", "Image2.jpg" };

// Nombre del archivo de salida/resultante.
string outputPath = "MergeImages_Horizontally.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);
    }
}

// Ancho y alto de la imagen resultante
int newWidth = imageSizes.Sum(size => size.Width);
int newHeight = imageSizes.Max(size => size.Height);

// Fusión de imágenes en una sola.
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);
}

Imágenes de entrada

First Image
Second Image

Imagen de salida

Horizontally Merged Image

Combinar imágenes JPG verticalmente en C#

Los pasos para fusionar imágenes JPEG verticalmente son los mismos que los anteriores. Una pequeña diferencia es que calculamos la altura de la imagen resultante sumando la altura de todas las imágenes en la matriz y el ancho encontrando el ancho máximo de una imagen en la matriz. El siguiente ejemplo de código muestra cómo unir imágenes JPEG verticalmente en C#.

// Una matriz de imágenes que desea fusionar
string[] imagePaths = { "Image1.jpeg", "Image2.jpg" };

string outputPath = "MergeImages_Vertically.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);
    }
}

// Ancho y Alto de la imagen resultante
int newWidth = imageSizes.Max(size => size.Width);
int newHeight = imageSizes.Sum(size => size.Height);

// Fusión de imágenes en una sola.
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

Combinar imágenes JPG en PDF en C#

Es posible que necesite combinar las imágenes JPEG en PDF. Puede hacer esto simplemente haciendo un cambio menor en el método Image.Save (use la extensión .pdf en lugar de .jpg).

// Una matriz de imágenes que desea fusionar.
string[] imagePaths = { "Image1.jpeg", "Image2.jpg" };

string outputPath = "MergeHorizontalAsPDF";
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);
    }
}

// Ancho y alto de la imagen resultante.
int newWidth = imageSizes.Sum(size => size.Width);
int newHeight = imageSizes.Max(size => size.Height);

// Fusión de imágenes en una sola.
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());
}

Combinar imágenes JPG en PNG en C#

Del mismo modo, es posible que desee combinar las imágenes JPEG en PNG. Como se muestra arriba, solo necesita usar la extensión .png en lugar de .jpg en el método Image.Save.

// Una matriz de imágenes que desea fusionar.
string[] imagePaths = { "Image1.jpeg", "Image2.jpg" };

string outputPath = "MergeHorizontalAsPNG";

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

// Ancho y alto de la imagen resultante.
int newWidth = imageSizes.Sum(size => size.Width);
int newHeight = imageSizes.Max(size => size.Height);

// Combinar imágenes en una y guardar 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());
    }
}

Conclusión

En este artículo, aprendió a unir imágenes JPEG en C#. Puedes combinarlos tanto en horizontal como en vertical. También aprendió a guardar la imagen combinada como PDF o PNG. Para obtener más información, consulte la documentación de Aspose.Imaging para .NET. Si tiene alguna pregunta, no dude en comunicarse con nosotros en nuestro Foro de soporte.

Ver también