Parfois, nous avons besoin de créer une image en combinant plusieurs images JPG ensemble. Cet article explique comment procéder en C#.

API d’imagerie C# - Téléchargement gratuit

Aspose.Imaging pour .NET fournit un certain nombre de routines flexibles pour créer et manipuler des images dans les applications .NET. Il vous permet de combiner des fichiers JPG en quelques lignes de code. Vous pouvez soit l’installer dans votre application .NET à l’aide de la DLL de l’API NuGet ou download.

Install-Package Aspose.Imaging

Fusionner des images JPG horizontalement en C#

Voici les étapes pour fusionner horizontalement des images JPEG en C#.

  • Créez un tableau d’images JPEG que vous souhaitez fusionner.
  • Calculez la largeur de l’image résultante en ajoutant la largeur de toutes les images du tableau et la hauteur en trouvant la hauteur maximale d’une image dans le tableau.
  • Créez une nouvelle image en utilisant la classe JpegImage et définissez sa largeur et sa hauteur sur celles calculées à la dernière étape.
  • Parcourez le tableau d’images (que vous souhaitez fusionner) et effectuez les tâches suivantes sur chaque image:
    • Chargez les pixels d’une image à l’aide de la méthode LoadArgb32Pixels et enregistrez-les dans l’image résultante à l’aide de la méthode SaveArgb32Pixels. Cette méthode prend également un objet Rectangle comme argument qui définit la position d’une image dans l’image résultante.
  • Enregistrez l’image résultante en tant qu’image JPEG.

L’exemple de code suivant montre comment joindre des images JPEG horizontalement 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;

// Tableau d'images que vous souhaitez fusionner.
string[] imagePaths = { "Image1.jpeg", "Image2.jpg" };

// Nom du fichier de sortie/résultant.
string outputPath = "MergeImages_Horizontally.jpg";

// Obtenir la taille de l'image résultante.
List<Size> imageSizes = new List<Size>();
foreach (string imagePath in imagePaths)
{
    using (RasterImage image = (RasterImage)Image.Load(imagePath))
    {
        imageSizes.Add(image.Size);
    }
}

// Largeur et hauteur de l'image résultante
int newWidth = imageSizes.Sum(size => size.Width);
int newHeight = imageSizes.Max(size => size.Height);

// Fusionner des images en une seule.
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);
}

Images d’entrée

Image de sortie

Fusionner des images JPG verticalement en C#

Les étapes pour fusionner verticalement des images JPEG sont les mêmes que ci-dessus. Une petite différence est que nous calculons la hauteur de l’image résultante en ajoutant la hauteur de toutes les images du tableau et la largeur en trouvant la largeur maximale d’une image dans le tableau. L’exemple de code suivant montre comment joindre verticalement des images JPEG en C#.

// Un tableau d'images que vous souhaitez fusionner
string[] imagePaths = { "Image1.jpeg", "Image2.jpg" };

string outputPath = "MergeImages_Vertically.jpg";

// Obtenir la taille de l'image résultante.
List<Size> imageSizes = new List<Size>();
foreach (string imagePath in imagePaths)
{
    using (RasterImage image = (RasterImage)Image.Load(imagePath))
    {
        imageSizes.Add(image.Size);
    }
}

// Largeur et hauteur de l'image résultante
int newWidth = imageSizes.Max(size => size.Width);
int newHeight = imageSizes.Sum(size => size.Height);

// Fusionner des images en une seule.
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);
    }
}

Fusionner des images JPG en PDF en C#

Vous devrez peut-être combiner les images JPEG en PDF. Vous pouvez le faire en apportant simplement une modification mineure à la méthode Image.Save (utilisez l’extension .pdf au lieu de .jpg).

// Un tableau d'images que vous souhaitez fusionner.
string[] imagePaths = { "Image1.jpeg", "Image2.jpg" };

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

// Obtenir la taille de l'image résultante.
List<Size> imageSizes = new List<Size>();
foreach (string imagePath in imagePaths)
{
    using (RasterImage image = (RasterImage)Image.Load(imagePath))
    {
        imageSizes.Add(image.Size);
    }
}

// Largeur et hauteur de l'image résultante.
int newWidth = imageSizes.Sum(size => size.Width);
int newHeight = imageSizes.Max(size => size.Height);

// Fusionner des images en une seule.
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());
}

Fusionner des images JPG en PNG en C#

De même, vous pouvez combiner les images JPEG en PNG. Comme indiqué ci-dessus, il vous suffit d’utiliser l’extension .png au lieu de .jpg dans la méthode Image.Save.

// Un tableau d'images que vous souhaitez fusionner.
string[] imagePaths = { "Image1.jpeg", "Image2.jpg" };

string outputPath = "MergeHorizontalAsPNG";

// Obtenir la taille de l'image résultante.
List<Size> imageSizes = new List<Size>();
foreach (string imagePath in imagePaths)
{
    using (RasterImage image = (RasterImage)Image.Load(imagePath))
    {
        imageSizes.Add(image.Size);
    }
}

// Largeur et hauteur de l'image résultante.
int newWidth = imageSizes.Sum(size => size.Width);
int newHeight = imageSizes.Max(size => size.Height);

// Fusionner des images en une seule et enregistrer au format 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());
    }
}

Conclusion

Dans cet article, vous avez appris à joindre des images JPEG en C#. Vous pouvez les combiner horizontalement ou verticalement. Vous avez également appris à enregistrer l’image fusionnée au format PDF ou PNG. Pour plus d’informations, veuillez consulter la documentation de Aspose.Imaging pour .NET. Si vous avez des questions, n’hésitez pas à nous contacter sur notre forum d’assistance.

Voir également