A volte abbiamo la necessità di creare un’immagine combinando più immagini JPG insieme. Questo articolo spiega come eseguire questa operazione in C#.

API C# Imaging – Download gratuito

Aspose.Imaging for .NET fornisce una serie di routine flessibili per la creazione e la manipolazione di immagini all’interno di applicazioni .NET. Ti consente di combinare file JPG in poche righe di codice. Puoi installarlo all’interno della tua applicazione .NET utilizzando NuGet o download DLL dell’API.

Install-Package Aspose.Imaging

Unisci immagini JPG orizzontalmente in C#

Di seguito sono riportati i passaggi per unire le immagini JPEG orizzontalmente in C#.

  • Crea una matrice di immagini JPEG che desideri unire.
  • Calcola la larghezza dell’immagine risultante aggiungendo la larghezza di tutte le immagini nell’array e l’altezza trovando l’altezza massima di un’immagine nell’array.
  • Crea una nuova immagine usando la classe JpegImage e impostane la larghezza e l’altezza su quella calcolata nell’ultimo passaggio.
  • Scorri l’array di immagini (che desideri unire) ed esegui le seguenti attività su ciascuna immagine:
    • Carica i pixel di un’immagine usando il metodo LoadArgb32Pixels e salvali nell’immagine risultante usando il metodo SaveArgb32Pixels. Questo metodo accetta anche un oggetto Rectangle come argomento che definisce la posizione di un’immagine nell’immagine risultante.
  • Salva l’immagine risultante come immagine JPEG.

L’esempio di codice seguente mostra come unire le immagini JPEG orizzontalmente in 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;

// Matrice di immagini che vuoi unire.
string[] imagePaths = { "Image1.jpeg", "Image2.jpg" };

// Nome del file di output/risultato.
string outputPath = "MergeImages_Horizontally.jpg";

// Ottenere la dimensione dell'immagine risultante.
List<Size> imageSizes = new List<Size>();
foreach (string imagePath in imagePaths)
{
    using (RasterImage image = (RasterImage)Image.Load(imagePath))
    {
        imageSizes.Add(image.Size);
    }
}

// Larghezza e altezza dell'immagine risultante
int newWidth = imageSizes.Sum(size => size.Width);
int newHeight = imageSizes.Max(size => size.Height);

// Unire le immagini in una.
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);
}

Immagini di input

Immagine di uscita

Unisci immagini JPG verticalmente in C#

I passaggi per unire le immagini JPEG verticalmente sono gli stessi di cui sopra. Una piccola differenza è che calcoliamo l’altezza dell’immagine risultante aggiungendo l’altezza di tutte le immagini nell’array e la larghezza trovando la larghezza massima di un’immagine nell’array. L’esempio di codice seguente mostra come unire le immagini JPEG verticalmente in C#.

// Una serie di immagini che vuoi unire
string[] imagePaths = { "Image1.jpeg", "Image2.jpg" };

string outputPath = "MergeImages_Vertically.jpg";

// Ottenere la dimensione dell'immagine risultante.
List<Size> imageSizes = new List<Size>();
foreach (string imagePath in imagePaths)
{
    using (RasterImage image = (RasterImage)Image.Load(imagePath))
    {
        imageSizes.Add(image.Size);
    }
}

// Larghezza e Altezza dell'immagine risultante
int newWidth = imageSizes.Max(size => size.Width);
int newHeight = imageSizes.Sum(size => size.Height);

// Unire le immagini in una.
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);
    }
}

Unisci immagini JPG in PDF in C#

Potrebbe essere necessario combinare le immagini JPEG in PDF. Puoi farlo semplicemente apportando una piccola modifica al metodo Image.Save (usa l’estensione .pdf invece di .jpg).

// Una serie di immagini che vuoi unire.
string[] imagePaths = { "Image1.jpeg", "Image2.jpg" };

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

// Ottenere la dimensione dell'immagine risultante.
List<Size> imageSizes = new List<Size>();
foreach (string imagePath in imagePaths)
{
    using (RasterImage image = (RasterImage)Image.Load(imagePath))
    {
        imageSizes.Add(image.Size);
    }
}

// Larghezza e altezza dell'immagine risultante.
int newWidth = imageSizes.Sum(size => size.Width);
int newHeight = imageSizes.Max(size => size.Height);

// Unire le immagini in una.
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());
}

Unisci immagini JPG in PNG in C#

Allo stesso modo, potresti voler combinare le immagini JPEG in PNG. Come mostrato sopra, devi solo usare l’estensione .png invece di .jpg nel metodo Image.Save.

// Una serie di immagini che vuoi unire.
string[] imagePaths = { "Image1.jpeg", "Image2.jpg" };

string outputPath = "MergeHorizontalAsPNG";

// Ottenere la dimensione dell'immagine risultante.
List<Size> imageSizes = new List<Size>();
foreach (string imagePath in imagePaths)
{
    using (RasterImage image = (RasterImage)Image.Load(imagePath))
    {
        imageSizes.Add(image.Size);
    }
}

// Larghezza e altezza dell'immagine risultante.
int newWidth = imageSizes.Sum(size => size.Width);
int newHeight = imageSizes.Max(size => size.Height);

// Unire le immagini in una e salvarle come 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());
    }
}

Conclusione

In questo articolo, hai imparato come unire immagini JPEG in C#. Puoi combinarli orizzontalmente o verticalmente. Hai anche imparato a salvare l’immagine unita come PDF o PNG. Per ulteriori informazioni, consultare la documentazione di Aspose.Imaging per .NET. In caso di domande, non esitare a contattarci al nostro Forum di supporto.

Guarda anche