Fusionner des images en Java

Il existe une gamme de scénarios dans lesquels l’édition et la manipulation d’images sont effectuées par programmation. Dans l’édition d’images, la fusion d’images est une fonctionnalité importante qui est utilisée pour combiner deux images ou plus, par exemple pour faire un collage. Dans cet article, vous apprendrez à fusionner plusieurs images en une seule image en Java. Nous montrerons explicitement comment fusionner des images horizontalement et verticalement.

API Java pour fusionner des images - Téléchargement gratuit

Aspose.Imaging for Java est une puissante API de traitement d’image qui vous permet de travailler avec une large gamme de formats d’image. Il fournit une variété de fonctionnalités nécessaires à l’édition d’images. Nous utiliserons cette API pour fusionner nos images dans cet article de blog. Vous pouvez soit télécharger l’API ou l’installer à l’aide des configurations Maven suivantes.

<repository>
    <id>AsposeJavaAPI</id>
    <name>Aspose Java API</name>
    <url>https://repository.aspose.com/repo/</url>
</repository> 

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-imaging</artifactId>
    <version>22.7</version>
</dependency>

Fusionner plusieurs images en Java

Vous pouvez fusionner les images de l’une des deux manières suivantes : verticalement et horizontalement. Dans la fusion verticale, les images sont combinées une par une dans une direction verticale. Alors que, dans la fusion horizontale, les images sont ajoutées les unes aux autres dans le sens horizontal. Voyons donc comment fusionner des images dans les deux sens.

Fusionner des images horizontalement en Java

Voici les étapes pour fusionner des images horizontalement à l’aide de Java.

  • Tout d’abord, spécifiez les chemins des images dans un tableau de chaînes.
  • Calculez la hauteur et la largeur de l’image résultante.
  • Créez un objet de la classe JpegOptions et définissez les options requises.
  • Créez un objet de la classe JpegImage et initialisez-le avec l’objet JpegOptions et la hauteur et la largeur de l’image résultante.
  • Parcourez la liste des images et chargez chaque image à l’aide de la classe RasterImage.
  • Créez un Rectangle pour chaque image et ajoutez-le à l’image résultante à l’aide de la méthode JpegImage.saveArgb32Pixels().
  • Augmentez la largeur cousue à chaque itération.
  • Une fois cela fait, enregistrez l’image résultante en utilisant la méthode JpegImage.save(string).

L’exemple de code suivant montre comment fusionner des images horizontalement en Java.

// Liste des images
String[] imagePaths = { "image.jpg", "image.jpg" };

// Chemin de l'image de sortie
String outputPath = "output-horizontal.jpg";
String tempFilePath = "temp.jpg";

// Obtenir la taille de l'image résultante
int newWidth = 0;
int newHeight = 0;
for (String imagePath : imagePaths) {
	try (RasterImage image = (com.aspose.imaging.RasterImage) com.aspose.imaging.Image.load(imagePath)) {
		Size size = image.getSize();
		newWidth += size.getWidth();
		newHeight = Math.max(newHeight, size.getHeight());
	}
}

// Combinez les images en une nouvelle
try (JpegOptions options = new JpegOptions()) {
	Source tempFileSource = new FileCreateSource(tempFilePath, true);
	options.setSource(tempFileSource);
	options.setQuality(100);

  	// Créer l'image résultante
	try (JpegImage newImage = (JpegImage) Image.create(options, newWidth, newHeight)) {
		int stitchedWidth = 0;
		for (String imagePath : imagePaths) {
			try (RasterImage image = (RasterImage) Image.load(imagePath)) {
				Rectangle bounds = new Rectangle(stitchedWidth, 0, image.getWidth(), image.getHeight());
				newImage.saveArgb32Pixels(bounds, image.loadArgb32Pixels(image.getBounds()));
				stitchedWidth += image.getWidth();
			}
		}
    
    		// Enregistrer l'image de sortie
		newImage.save(outputPath);
	}
}

L’image suivante montre le résultat de la fusion horizontale de deux images similaires.

Fusionner des images horizontalement en Java

Fusionner des images verticalement en Java

Pour fusionner les images verticalement, il vous suffit d’inverser les rôles des propriétés de hauteur et de largeur. Le reste du code sera le même. L’exemple de code suivant montre comment fusionner plusieurs images verticalement en Java.

// Liste des images
String[] imagePaths = { "image.jpg", "image.jpg" };

// Chemin de l'image de sortie
String outputPath = "output-vertical.jpg";

// Obtenir la taille de l'image résultante
int newWidth = 0;
int newHeight = 0;
for (String imagePath : imagePaths) {
	try (RasterImage image = (RasterImage) Image.load(imagePath)) {
		Size size = image.getSize();
		newWidth = Math.max(newWidth, size.getWidth());
		newHeight += size.getHeight();
	}
}

// Combinez les images en une nouvelle
try (JpegOptions options = new JpegOptions()) {
	options.setSource(new StreamSource()); // empty
	options.setQuality(100);
  
  	// Créer l'image résultante
	try (JpegImage newImage = (JpegImage) Image.create(options, newWidth, newHeight)) {
		int stitchedHeight = 0;
		for (String imagePath : imagePaths) {
			try (RasterImage image = (RasterImage) Image.load(imagePath)) {
				Rectangle bounds = new Rectangle(0, stitchedHeight, image.getWidth(), image.getHeight());
				newImage.saveArgb32Pixels(bounds, image.loadArgb32Pixels(image.getBounds()));
				stitchedHeight += image.getHeight();
			}
		}
    		// Enregistrer l'image résultante
		newImage.save(outputPath);
	}
}

L’image suivante montre le résultat de la fusion verticale de deux images similaires.

Fusionner des images verticalement en Java

Fusionner des images PNG en Java

Dans les sections précédentes, nous avons montré comment fusionner des images au format JPG. Cependant, vous devrez peut-être également fusionner des images au format PNG. Pour fusionner des images PNG, il vous suffit de remplacer les classes JpegImage et JpegOptions par les classes PngImage et PngOptions respectivement et le reste du code restera le même.

L’exemple de code suivant montre comment fusionner plusieurs images au format PNG en Java.

// Liste des images
String[] imagePaths = { "image.png", "image.png" };

// Chemin de l'image de sortie
String outputPath = "output-horizontal.png";
String tempFilePath = "temp.png";

// Obtenir la taille de l'image résultante
int newWidth = 0;
int newHeight = 0;
for (String imagePath : imagePaths) {
	try (RasterImage image = (com.aspose.imaging.RasterImage) com.aspose.imaging.Image.load(imagePath)) {
		Size size = image.getSize();
		newWidth += size.getWidth();
		newHeight = Math.max(newHeight, size.getHeight());
	}
}

// Combinez les images en une nouvelle
try (PngOptions options = new PngOptions()) {
	Source tempFileSource = new FileCreateSource(tempFilePath, true);
	options.setSource(tempFileSource);

  	// Créer l'image résultante
	try (PngImage newImage = (PngImage) Image.create(options, newWidth, newHeight)) {
		int stitchedWidth = 0;
		for (String imagePath : imagePaths) {
			try (RasterImage image = (RasterImage) Image.load(imagePath)) {
				Rectangle bounds = new Rectangle(stitchedWidth, 0, image.getWidth(), image.getHeight());
				newImage.saveArgb32Pixels(bounds, image.loadArgb32Pixels(image.getBounds()));
				stitchedWidth += image.getWidth();
			}
		}
    		// Enregistrer l'image
		newImage.save(outputPath);
	}
}

API de fusion d’images Java - Obtenez une licence gratuite

Vous pouvez obtenir une licence temporaire gratuite et fusionner les images sans limitation d’évaluation.

Conclusion

Dans cet article, vous avez appris à fusionner plusieurs images en une seule image à l’aide de Java. Les exemples de code Java ont montré comment combiner les images verticalement et horizontalement. De plus, vous pouvez en savoir plus sur l’API de traitement d’image Java à 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.