Fusionner des images en C#

Dans cet article, vous apprendrez comment fusionner ou combiner plusieurs images en une seule image par programmation à l’aide de C#. Le guide étape par étape et les exemples de code vous montreront comment fusionner des images horizontalement ou verticalement.

API C# pour fusionner des images

Afin de fusionner plusieurs images en une seule image, nous utiliserons Aspose.Imaging for .NET. Il s’agit d’une API de traitement d’image puissante et riche en fonctionnalités qui vous permet de manipuler une large gamme de formats d’image. Vous pouvez soit télécharger l’API ou l’installer à l’aide de NuGet.

PM> Install-Package Aspose.Imaging

Fusionner plusieurs images à l’aide de C#

Il existe deux façons de fusionner des images en une seule : verticalement et horizontalement. Dans la première méthode, les images sont ajoutées les unes aux autres verticalement, alors que, dans la seconde, les images sont combinées les unes après les autres horizontalement. Dans les sections suivantes, vous apprendrez les deux méthodes avec des exemples de code.

Fusionner les images verticalement

Voici les étapes pour fusionner des images verticalement à l’aide de C#.

  • Tout d’abord, spécifiez les chemins des images dans un tableau de chaînes.
  • Ensuite, créez une liste de Size et stockez-y la taille de chaque image.
  • Calculez la hauteur et la largeur de l’image résultante.
  • Créez un objet de la classe StreamSource et initialisez-le avec un nouveau MemoryStream.
  • Créez un objet de la classe JpegOptions et définissez ses options.
  • Instanciez la classe JpegImage pour la nouvelle image et initialisez-la avec JpegOptions et calculez la hauteur et la largeur.
  • Parcourez la liste des images et à chaque itération, chargez l’image dans un objet RasterImage.
  • Créez un Rectangle pour chaque image et ajoutez-le à la nouvelle image à l’aide de la méthode JpegImage.SaveArgb32Pixels().
  • Augmentez la hauteur cousue à chaque itération.
  • Enfin, enregistrez la nouvelle image en utilisant la méthode JpegImage.Save(string).

L’exemple de code suivant montre comment fusionner des images verticalement.

// Créer une liste d'images
string[] imagePaths = { "image1.jpg", "image2.jpg", "image3.jpg", "image4.jpg", "image5.png" };

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

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

// Combinez les images en une nouvelle
using (MemoryStream memoryStream = new MemoryStream())
{
    // Créer une source de sortie
    StreamSource outputStreamSource = new StreamSource(memoryStream);
    
    // Créer des options jpeg
    JpegOptions options = new JpegOptions() { Source = outputStreamSource, Quality = 100 };
    
    // Créer une image de sortie
    using (JpegImage newImage = (JpegImage)Image.Create(options, newWidth, newHeight))
    {
        int stitchedHeight = 0;
        // Fusionner des images
        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;
            }
        }
        
        // Enregistrer l'image fusionnée
        newImage.Save("merged-image.jpg");
    }
}

Fusionner les images horizontalement

Voici les étapes pour combiner des images horizontalement à l’aide de C#.

  • Tout d’abord, spécifiez les chemins des images dans un tableau de chaînes.
  • Ensuite, créez une liste de Size et stockez-y la taille de chaque image.
  • Calculez la hauteur et la largeur de l’image résultante.
  • Créez une nouvelle source en utilisant FileCreateSource(String, Boolean) et initialisez-la avec le chemin du fichier.
  • Créez un objet de la classe JpegOptions et définissez ses options.
  • Instanciez la classe JpegImage pour la nouvelle image et initialisez-la avec JpegOptions et calculez la hauteur et la largeur.
  • Parcourez la liste des images et à chaque itération, chargez l’image dans un objet RasterImage.
  • Créez un Rectangle pour chaque image et ajoutez-le à la nouvelle image à l’aide de la méthode JpegImage.SaveArgb32Pixels().
  • Augmentez la largeur cousue à chaque itération.
  • Une fois cela fait, enregistrez la nouvelle image en utilisant la méthode JpegImage.Save(string).

L’exemple de code suivant montre comment fusionner plusieurs images horizontalement.

// Créer une liste d'images
string[] imagePaths = { "image1.jpg", "image2.jpg", "image3.jpg", "image4.JPG", "image5.png" };

// Pour créer une image temporaire
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);
    }
}

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

// Combinez les images en une nouvelle
Source tempFileSource = new FileCreateSource(tempFilePath, isTemporal: true);

// Créer des options jpeg
JpegOptions options = new JpegOptions() { Source = tempFileSource, Quality = 100 };
using (JpegImage newImage = (JpegImage)Image.Create(options, newWidth, newHeight))
{
    int stitchedWidth = 0;
    
    // Fusionner des images
    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;
        }
    }
    
    // Enregistrer l'image fusionnée
    newImage.Save(outputPath);
}

Obtenez une licence API gratuite

Vous pouvez obtenir une licence temporaire gratuite afin d’utiliser l’API sans limitations d’évaluation.

Conclusion

Dans cet article, vous avez appris à fusionner plusieurs images en une seule image à l’aide de C#. Les exemples de code ont montré comment combiner les images verticalement et horizontalement. Vous pouvez en savoir plus sur l’API de traitement d’image .NET à l’aide de documentation. Vous pouvez également partager vos questions avec nous via notre forum.

Voir également

Info : Aspose fournit une application Web FREE Collage. À l’aide de ce service en ligne, vous pouvez fusionner des images JPG vers JPG ou PNG vers PNG, créer des grilles de photos, etc.