Unisci immagini in C#

In questo articolo imparerai come unire o combinare più immagini in un’unica immagine a livello di codice usando C#. La guida dettagliata e gli esempi di codice dimostreranno come unire le immagini orizzontalmente o verticalmente.

API C# per unire le immagini

Per unire più immagini in un’unica immagine, useremo Aspose.Imaging for .NET. È un’API di elaborazione delle immagini potente e ricca di funzionalità che consente di manipolare un’ampia gamma di formati di immagine. Puoi scaricare l’API o installarla utilizzando NuGet.

PM> Install-Package Aspose.Imaging

Unisci più immagini usando C#

Esistono due modi per unire le immagini in una sola: verticalmente e orizzontalmente. Nel primo metodo, le immagini vengono aggiunte l’una all’altra verticalmente, mentre nel secondo le immagini vengono combinate una dopo l’altra orizzontalmente. Nelle sezioni seguenti imparerai entrambi i metodi con esempi di codice.

Unisci le immagini verticalmente

Di seguito sono riportati i passaggi per unire le immagini verticalmente usando C#.

  • Innanzitutto, specifica i percorsi delle immagini in una matrice di stringhe.
  • Quindi, crea un elenco di dimensioni e memorizza le dimensioni di ciascuna immagine al suo interno.
  • Calcola l’altezza e la larghezza dell’immagine risultante.
  • Crea un oggetto della classe StreamSource e inizializzalo con un nuovo MemoryStream.
  • Crea un oggetto della classe JpegOptions e imposta le sue opzioni.
  • Crea un’istanza della classe JpegImage per la nuova immagine e inizializzala con JpegOptions e calcola l’altezza e la larghezza.
  • Scorri l’elenco delle immagini e, in ogni iterazione, carica l’immagine in un oggetto RasterImage.
  • Crea un Rectangle per ogni immagine e aggiungilo alla nuova immagine usando il metodo JpegImage.SaveArgb32Pixels().
  • Aumenta l’altezza della cucitura in ogni iterazione.
  • Infine, salva la nuova immagine usando il metodo JpegImage.Save(string).

L’esempio di codice seguente mostra come unire le immagini verticalmente.

// Crea un elenco di immagini
string[] imagePaths = { "image1.jpg", "image2.jpg", "image3.jpg", "image4.jpg", "image5.png" };

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

int newWidth = imageSizes.Max(size => size.Width);
int newHeight = imageSizes.Sum(size => size.Height);

// Combina le immagini in una nuova
using (MemoryStream memoryStream = new MemoryStream())
{
    // Crea sorgente di output
    StreamSource outputStreamSource = new StreamSource(memoryStream);
    
    // Crea opzioni jpeg
    JpegOptions options = new JpegOptions() { Source = outputStreamSource, Quality = 100 };
    
    // Crea immagine di output
    using (JpegImage newImage = (JpegImage)Image.Create(options, newWidth, newHeight))
    {
        int stitchedHeight = 0;
        // Unisci immagini
        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;
            }
        }
        
        // Salva l'immagine unita
        newImage.Save("merged-image.jpg");
    }
}

Unisci le immagini orizzontalmente

Di seguito sono riportati i passaggi per combinare le immagini orizzontalmente usando C#.

  • Innanzitutto, specifica i percorsi delle immagini in una matrice di stringhe.
  • Quindi, crea un elenco di dimensioni e memorizza le dimensioni di ciascuna immagine al suo interno.
  • Calcola l’altezza e la larghezza dell’immagine risultante.
  • Crea una nuova fonte usando FileCreateSource(String, Boolean) e inizializzala con il percorso del file.
  • Crea un oggetto della classe JpegOptions e imposta le sue opzioni.
  • Crea un’istanza della classe JpegImage per la nuova immagine e inizializzala con JpegOptions e calcola l’altezza e la larghezza.
  • Scorri l’elenco delle immagini e, in ogni iterazione, carica l’immagine in un oggetto RasterImage.
  • Crea un Rettangolo per ogni immagine e aggiungilo alla nuova immagine usando il metodo JpegImage.SaveArgb32Pixels().
  • Aumenta la larghezza cucita in ogni iterazione.
  • Al termine, salva la nuova immagine utilizzando il metodo JpegImage.Save(string).

L’esempio di codice seguente mostra come unire più immagini orizzontalmente.

// Crea un elenco di immagini
string[] imagePaths = { "image1.jpg", "image2.jpg", "image3.jpg", "image4.JPG", "image5.png" };

// Per creare un'immagine temporanea
string tempFilePath = "temp.jpg";

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

int newWidth = imageSizes.Sum(size => size.Width);
int newHeight = imageSizes.Max(size => size.Height);

// Combina le immagini in una nuova
Source tempFileSource = new FileCreateSource(tempFilePath, isTemporal: true);

// Crea opzioni jpeg
JpegOptions options = new JpegOptions() { Source = tempFileSource, Quality = 100 };
using (JpegImage newImage = (JpegImage)Image.Create(options, newWidth, newHeight))
{
    int stitchedWidth = 0;
    
    // Unisci immagini
    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;
        }
    }
    
    // Salva l'immagine unita
    newImage.Save(outputPath);
}

Ottieni una licenza API gratuita

Puoi ottenere una licenza temporanea gratuita per utilizzare l’API senza limitazioni di valutazione.

Conclusione

In questo articolo, hai imparato come unire più immagini in un’unica immagine usando C#. Gli esempi di codice hanno dimostrato come combinare le immagini verticalmente e orizzontalmente. Puoi esplorare di più sull’API di elaborazione delle immagini .NET utilizzando documentazione. Inoltre, puoi condividere le tue domande con noi tramite il nostro forum.

Guarda anche

Info: Aspose fornisce un’app Web Collage GRATUITA. Utilizzando questo servizio online, puoi unire immagini da JPG a JPG o da PNG a PNG, creare griglie di foto e così via.