Unisci immagini in Python

L’editing delle immagini è immensamente utilizzato per migliorare la qualità delle immagini. Con l’emergere di fotocamere mobili e app di modifica delle immagini, ogni utente mobile sa come modificare un’immagine. Tra le altre funzionalità di modifica delle immagini, la creazione di collage è popolare in cui più immagini vengono combinate in un’unica immagine. Quindi in questo articolo dimostreremo come unire più immagini in Python. Questo potrebbe esserti utile se hai a che fare con la modifica delle immagini nella tua applicazione Python.

Libreria Python per unire immagini

Per unire più immagini in una singola immagine, useremo Aspose.Imaging for Python. È una libreria di elaborazione delle immagini ricca di funzionalità per eseguire diverse operazioni di modifica delle immagini senza sforzo. Puoi scaricare la libreria o installarla usando il seguente comando.

> pip install aspose-imaging-python-net 

Unisci più immagini in Python

Esistono due modi per unire le immagini: verticalmente e orizzontalmente. Puoi scegliere il metodo adatto. Diamo un’occhiata a come combinare le immagini in entrambi i modi nelle sezioni seguenti.

Unisci le immagini orizzontalmente in Python

Di seguito sono riportati i passaggi per unire le immagini orizzontalmente utilizzando Aspose.Imaging for Python.

  • Inizia specificando i percorsi delle immagini in un array.
  • Quindi, calcola l’altezza e la larghezza dell’immagine risultante.
  • Crea un oggetto della classe JpegOptions e imposta le opzioni richieste.
  • Crea un oggetto della classe JpegImage e inizializzalo con l’oggetto JpegOptions e l’altezza e la larghezza dell’immagine risultante.
  • Scorri l’elenco delle immagini e carica ciascuna immagine utilizzando la classe RasterImage.
  • Crea un rettangolo per ogni immagine e aggiungilo all’immagine risultante utilizzando il metodo JpegImage.saveargb32pixels().
  • Aumenta la larghezza del punto in ogni iterazione.
  • Infine, salva l’immagine risultante utilizzando il metodo JpegImage.save(string).

Di seguito è riportato il codice per unire le immagini orizzontalmente in Python.

import aspose.pycore as aspycore
from aspose.imaging import Image, Rectangle, RasterImage
from aspose.imaging.imageoptions import JpegOptions
from aspose.imaging.sources import FileCreateSource
from aspose.imaging.fileformats.jpeg import JpegImage
import os

# Definire le cartelle
if 'TEMPLATE_DIR' in os.environ:
	templates_folder = os.environ['TEMPLATE_DIR']
else:
	templates_folder = r"C:\Users\USER\Downloads\templates"

delete_output = 'SAVE_OUTPUT' not in os.environ
data_dir = templates_folder
image_paths = [os.path.join(data_dir, "template.jpg"), 
			   os.path.join(data_dir, "template.jpeg")]
output_path = os.path.join(data_dir, "result.jpg")
temp_file_path = os.path.join(data_dir, "temp.jpg")

# Ottieni la dimensione dell'immagine risultante
image_sizes = []
for image_path in image_paths:
	with Image.load(image_path) as image:
		image_sizes.append(image.size)

# Calcola nuova dimensione
new_width = 0
new_height = 0
for size in image_sizes:
	new_width += size.width
	new_height = max(new_height, size.height)
	
# Combina le immagini in una nuova
temp_file_source = FileCreateSource(temp_file_path, delete_output)
with JpegOptions() as options:
	options.source = temp_file_source
	options.quality = 100
	with aspycore.as_of(Image.create(options, new_width, new_height), JpegImage) as new_image:
		stitched_width = 0
		for image_path in image_paths:
			with aspycore.as_of(Image.load(image_path), RasterImage) as image:
				bounds = Rectangle(stitched_width, 0, image.width, image.height)
				new_image.save_argb_32_pixels(bounds, image.load_argb_32_pixels(image.bounds))
				stitched_width += image.width
		new_image.save(output_path)

# Elimina i file temporanei
if delete_output:
	os.remove(output_path)
	if os.path.exists(temp_file_path):
		os.remove(temp_file_path)

Di seguito è riportata l’immagine di output che abbiamo ottenuto dopo aver unito le immagini orizzontalmente.

Unisci le immagini orizzontalmente in Python

Combina immagini verticalmente in Python

Vediamo ora come unire più immagini verticalmente. I passaggi per unire le immagini verticalmente sarebbero gli stessi della sezione precedente. L’unica differenza è che invertiremo i ruoli delle proprietà di altezza e larghezza.

L’esempio di codice seguente mostra come unire le immagini in un layout verticale in Python.

import aspose.pycore as aspycore
from aspose.imaging import Image, Rectangle, RasterImage
from aspose.imaging.imageoptions import JpegOptions
from aspose.imaging.sources import StreamSource
from aspose.imaging.fileformats.jpeg import JpegImage
from aspose.imaging.extensions import StreamExtensions
import os
import functools

# Definire le cartelle
if 'TEMPLATE_DIR' in os.environ:
	templates_folder = os.environ['TEMPLATE_DIR']
else:
	templates_folder = r"C:\Users\USER\Downloads\templates"

delete_output = 'SAVE_OUTPUT' not in os.environ
data_dir = templates_folder
image_paths = [os.path.join(data_dir, "template.jpg"), os.path.join(data_dir, "template.jpeg")]
output_path = os.path.join(data_dir, "result.jpg")
temp_file_path = os.path.join(data_dir, "temp.jpg")

# Ottieni la dimensione dell'immagine risultante
image_sizes = []
for image_path in image_paths:
	with Image.load(image_path) as image:
		image_sizes.append(image.size)

# Calcola nuova dimensione
new_width = 0
new_height = 0
for size in image_sizes:
	new_height += size.height
	new_width = max(new_width, size.width)
	
# Combina le immagini in una nuova
with StreamExtensions.create_memory_stream() as memory_stream:
	output_stream_source = StreamSource(memory_stream)
	with JpegOptions() as options:
		options.source = output_stream_source
		options.quality = 100
		with aspycore.as_of(Image.create(options, new_width, new_height), JpegImage) as new_image:
			stitched_height = 0
			for image_path in image_paths:
				with aspycore.as_of(Image.load(image_path), RasterImage) as image:
					bounds = Rectangle(0, stitched_height, image.width, image.height)
					new_image.save_argb_32_pixels(bounds, image.load_argb_32_pixels(image.bounds))
					stitched_height += image.height

			new_image.save(output_path)

# Elimina i file temporanei
if delete_output:
	os.remove(output_path)

L’immagine seguente mostra l’output dell’unione verticale di due immagini simili.

Unisci immagini verticalmente in Python

Unisci immagini PNG in Python

I passaggi e gli esempi di codice forniti nelle sezioni precedenti riguardavano l’unione di immagini JPG, tuttavia potrebbe essere necessario unire anche immagini PNG. Non c’è bisogno di preoccuparsi. Gli stessi passaggi e il codice di esempio sono validi per le immagini PNG e l’unica modifica sarebbe l’utilizzo delle classi PngImage e PngOptions invece di JpegImage e JpegOptions, rispettivamente.

Ottieni gratuitamente la libreria Python Image Merging

Puoi ottenere una licenza temporanea gratuita e unire le immagini senza limiti di valutazione.

Unisci immagini online

Puoi anche utilizzare il nostro strumento gratuito per la fusione delle immagini per unire le tue immagini online. Questo strumento è basato su Aspose.Imaging for Python e non è necessario creare un account per esso.

Conclusione

Questo articolo ti ha fornito una delle soluzioni migliori e più semplici per unire più immagini in un’unica immagine in Python. L’unione di immagini orizzontali e verticali è dimostrata con l’aiuto di esempi di codice. Inoltre, ti abbiamo presentato uno strumento online per unire le immagini gratuitamente.

Puoi esplorare di più sulla libreria di elaborazione delle immagini Python visitando la documentazione. Inoltre, puoi condividere le tue domande con noi tramite il nostro forum.

Guarda anche