Sloučit obrázky v Python

Ke zvýšení kvality obrázků se nesmírně používá úprava obrázků. S nástupem mobilních fotoaparátů a aplikací pro úpravu obrázků si každý mobilní uživatel uvědomuje, jak upravit obrázek. Mezi další funkce pro úpravu obrázků je populární vytváření koláží, ve kterých je více obrázků spojeno do jednoho obrázku. V tomto článku si tedy ukážeme, jak sloučit více obrázků v Python. To by se vám mohlo hodit, pokud se zabýváte úpravami obrázků v aplikaci Python.

Knihovna Python pro sloučení obrázků

Ke sloučení více obrázků do jednoho obrázku použijeme Aspose.Imaging for Python. Jedná se o funkčně bohatou knihovnu pro zpracování obrázků, která bez námahy provádí několik operací úprav obrázků. Knihovnu můžete buď stáhnout, nebo ji nainstalovat pomocí následujícího příkazu.

> pip install aspose-imaging-python-net 

Sloučit více obrázků v Python

Obrázky lze sloučit dvěma způsoby: svisle a vodorovně. Můžete si vybrat vhodnou metodu. Podívejme se v následujících částech na to, jak kombinovat obrázky oběma způsoby.

Sloučit obrázky vodorovně v Python

Níže jsou uvedeny kroky pro horizontální sloučení obrázků pomocí Aspose.Imaging for Python.

  • Začněte zadáním cest obrázků v poli.
  • Poté vypočítejte výšku a šířku výsledného obrázku.
  • Vytvořte objekt třídy JpegOptions a nastavte požadované možnosti.
  • Vytvořte objekt třídy JpegImage a inicializujte jej objektem JpegOptions a výškou a šířkou výsledného obrázku.
  • Projděte seznam obrázků a načtěte každý obrázek pomocí třídy RasterImage.
  • Vytvořte obdélník pro každý obrázek a přidejte jej do výsledného obrázku pomocí metody JpegImage.saveargb32pixels().
  • Zvětšete šířku šití v každé iteraci.
  • Nakonec výsledný obrázek uložte pomocí metody JpegImage.save(string).

Níže je kód pro horizontální sloučení obrázků v 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

# Definujte složky
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")

# Získejte výslednou velikost obrázku
image_sizes = []
for image_path in image_paths:
	with Image.load(image_path) as image:
		image_sizes.append(image.size)

# Vypočítejte novou velikost
new_width = 0
new_height = 0
for size in image_sizes:
	new_width += size.width
	new_height = max(new_height, size.height)
	
# Spojte obrázky do nového
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)

# Odstraňte dočasné soubory
if delete_output:
	os.remove(output_path)
	if os.path.exists(temp_file_path):
		os.remove(temp_file_path)

Níže je výstupní obrázek, který jsme získali po vodorovném sloučení obrázků.

Sloučit obrázky vodorovně v Python

Kombinujte obrázky vertikálně v Python

Podívejme se nyní, jak sloučit více obrázků vertikálně. Kroky vertikálního sloučení obrázků by byly stejné jako v předchozí části. Jediný rozdíl je v tom, že bychom si vyměnili role vlastností výšky a šířky.

Následující ukázka kódu ukazuje, jak sloučit obrázky ve vertikálním rozložení v 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

# Definujte složky
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")

# Získejte výslednou velikost obrázku
image_sizes = []
for image_path in image_paths:
	with Image.load(image_path) as image:
		image_sizes.append(image.size)

# Vypočítejte novou velikost
new_width = 0
new_height = 0
for size in image_sizes:
	new_height += size.height
	new_width = max(new_width, size.width)
	
# Spojte obrázky do nového
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)

# Odstraňte dočasné soubory
if delete_output:
	os.remove(output_path)

Následující obrázek ukazuje výstup sloučení dvou podobných obrázků svisle.

Sloučit obrázky vertikálně v Python

Sloučit obrázky PNG v Python

Kroky a ukázky kódu uvedené v předchozích částech byly pro sloučení obrázků JPG, možná však budete muset sloučit i obrázky PNG. Není třeba se obávat. Stejné kroky a ukázka kódu platí pro obrázky PNG a jedinou změnou by bylo použití tříd PngImage a PngOptions namísto JpegImage a JpegOptions.

Získejte zdarma knihovnu pro slučování obrázků v Python

Můžete získat bezplatnou dočasnou licenci a sloučit obrázky bez omezení hodnocení.

Sloučit obrázky online

Ke sloučení obrázků online můžete také použít náš bezplatný nástroj pro slučování obrázků. Tento nástroj je založen na Aspose.Imaging for Python a nemusíte si pro něj vytvářet účet.

Závěr

Tento článek vám poskytl jedno z nejlepších a nejjednodušších řešení pro sloučení více obrázků do jednoho obrázku v Python. Horizontální a vertikální sloučení obrazu je demonstrováno pomocí ukázek kódu. Kromě toho jsme vám představili online nástroj pro bezplatné slučování obrázků.

Více o knihovně pro zpracování obrázků v Python můžete prozkoumat v dokumentaci. Své dotazy s námi můžete sdílet také prostřednictvím našeho fóra.

Viz také