Slå samman bilder i Python

Bildredigering används oerhört för att förbättra kvaliteten på bilderna. Med framväxten av mobilkameror och bildredigeringsappar är varje mobilanvändare medveten om hur man redigerar en bild. Bland andra bildredigeringsfunktioner är det populärt att skapa collage där flera bilder kombineras till en enda bild. Så i den här artikeln kommer vi att visa hur man slår ihop flera bilder i Python. Detta kan vara användbart för dig om du har att göra med bildredigering i din Python-applikation.

Python-bibliotek för att slå samman bilder

För att slå samman flera bilder till en enda bild kommer vi att använda Aspose.Imaging for Python. Det är ett funktionsrikt bildbehandlingsbibliotek för att utföra flera bildredigeringsoperationer utan ansträngning. Du kan antingen ladda ner biblioteket eller installera det med följande kommando.

> pip install aspose-imaging-python-net 

Slå samman flera bilder i Python

Det finns två sätt att slå samman bilder: vertikalt och horisontellt. Du kan välja lämplig metod. Låt oss ta en titt på hur man kombinerar bilder på båda sätten i följande avsnitt.

Slå samman bilder horisontellt i Python

Nedan är stegen för att slå samman bilderna horisontellt med Aspose.Imaging för Python.

  • Börja med att ange sökvägarna för bilderna i en array.
  • Beräkna sedan höjden och bredden på den resulterande bilden.
  • Skapa ett objekt av klassen JpegOptions och ställ in de nödvändiga alternativen.
  • Skapa ett objekt av klassen JpegImage och initiera det med JpegOptions-objektet och höjden och bredden på den resulterande bilden.
  • Gå igenom listan med bilder och ladda varje bild med RasterImage-klassen.
  • Skapa en rektangel för varje bild och lägg till den i den resulterande bilden med metoden JpegImage.saveargb32pixels().
  • Öka stygnbredden i varje iteration.
  • Slutligen, spara den resulterande bilden med metoden JpegImage.save(string).

Nedan finns koden för att slå samman bilder horisontellt i 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

# Definiera mapparna
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")

# Få den resulterande bildstorleken
image_sizes = []
for image_path in image_paths:
	with Image.load(image_path) as image:
		image_sizes.append(image.size)

# Beräkna ny storlek
new_width = 0
new_height = 0
for size in image_sizes:
	new_width += size.width
	new_height = max(new_height, size.height)
	
# Kombinera bilder till en ny
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)

# Ta bort tillfälliga filer
if delete_output:
	os.remove(output_path)
	if os.path.exists(temp_file_path):
		os.remove(temp_file_path)

Nedan är utdatabilden som vi fick efter att ha slagit ihop bilder horisontellt.

Slå samman bilder horisontellt i Python

Kombinera bilder vertikalt i Python

Låt oss nu se hur man slår samman flera bilder vertikalt. Stegen för att sammanfoga bilder vertikalt skulle vara desamma som i föregående avsnitt. Den enda skillnaden är att vi skulle byta rollerna för höjd- och breddegenskaper.

Följande kodexempel visar hur man slår samman bilder i en vertikal layout i 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

# Definiera mappar
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")

# Få resulterande bildstorlek
image_sizes = []
for image_path in image_paths:
	with Image.load(image_path) as image:
		image_sizes.append(image.size)

# Beräkna ny storlek
new_width = 0
new_height = 0
for size in image_sizes:
	new_height += size.height
	new_width = max(new_width, size.width)
	
# Kombinera bilder till en ny
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)

# Ta bort tillfälliga filer
if delete_output:
	os.remove(output_path)

Följande bild visar resultatet av att slå samman två liknande bilder vertikalt.

Slå samman bilder vertikalt i Python

Slå ihop PNG-bilder i Python

Stegen och kodexemplen i de föregående avsnitten var för att slå samman JPG-bilder, men du kan behöva slå ihop PNG-bilder också. Du behöver inte oroa dig. Samma steg och kodexempel är giltiga för PNG-bilder och den enda ändringen skulle vara att använda klasserna PngImage och PngOptions istället för JpegImage respektive JpegOptions.

Skaffa gratis Python Image Merging Library

Du kan få en gratis tillfällig licens och slå samman bilderna utan utvärderingsbegränsningar.

Slå samman bilder online

Du kan också använda vårt gratis bildsammanfogningsverktyg för att slå samman dina bilder online. Detta verktyg är baserat på Aspose.Imaging för Python och du behöver inte skapa ett konto för det.

Slutsats

Den här artikeln gav dig en av de bästa och enklaste lösningarna för att slå samman flera bilder till en enda bild i Python. Den horisontella och vertikala bildsammanslagningen demonstreras med hjälp av kodexempel. Dessutom har vi introducerat dig till ett onlineverktyg för att slå samman bilder utan kostnad.

Du kan utforska mer om Pythons bildbehandlingsbibliotek genom att besöka dokumentationen. Du kan också dela dina frågor med oss via vårt forum.

Se även