Scal obrazy w Python

Edycja obrazu jest niezwykle wykorzystywana do poprawy jakości obrazów. Wraz z pojawieniem się aparatów mobilnych i aplikacji do edycji obrazu każdy użytkownik mobilny jest świadomy, jak edytować obraz. Wśród innych funkcji edycji obrazu popularne jest tworzenie kolaży, w których wiele obrazów jest łączonych w jeden obraz. W tym artykule pokażemy, jak scalić wiele obrazów w Python. Może to być przydatne, jeśli masz do czynienia z edycją obrazu w aplikacji Python.

Biblioteka Python do łączenia obrazów

Aby połączyć wiele obrazów w jeden, użyjemy Aspose.Imaging for Python. Jest to bogata w funkcje biblioteka przetwarzania obrazu, która umożliwia bezproblemowe wykonywanie kilku operacji edycji obrazu. Możesz pobrać bibliotekę lub zainstalować ją za pomocą następującego polecenia.

> pip install aspose-imaging-python-net 

Połącz wiele obrazów w Python

Istnieją dwa sposoby łączenia obrazów: w pionie iw poziomie. Możesz wybrać odpowiednią metodę. Przyjrzyjmy się, jak łączyć obrazy na dwa sposoby w poniższych sekcjach.

Scal obrazy poziomo w Python

Poniżej znajdują się kroki, aby scalić obrazy w poziomie za pomocą Aspose.Imaging for Python.

  • Rozpocznij od określenia ścieżek obrazów w tablicy.
  • Następnie oblicz wysokość i szerokość powstałego obrazu.
  • Utwórz obiekt klasy JpegOptions i ustaw wymagane opcje.
  • Utwórz obiekt klasy JpegImage i zainicjuj go obiektem JpegOptions oraz wysokością i szerokością wynikowego obrazu.
  • Przejrzyj listę obrazów i załaduj każdy obraz za pomocą klasy RasterImage.
  • Utwórz prostokąt dla każdego obrazu i dodaj go do wynikowego obrazu za pomocą metody JpegImage.saveargb32pixels().
  • Zwiększ szerokość ściegu w każdej iteracji.
  • Na koniec zapisz wynikowy obraz za pomocą metody JpegImage.save(string).

Poniżej znajduje się kod do poziomego łączenia obrazów w 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

# Zdefiniuj foldery
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")

# Uzyskaj wynikowy rozmiar obrazu
image_sizes = []
for image_path in image_paths:
	with Image.load(image_path) as image:
		image_sizes.append(image.size)

# Oblicz nowy rozmiar
new_width = 0
new_height = 0
for size in image_sizes:
	new_width += size.width
	new_height = max(new_height, size.height)
	
# Połącz obrazy w nowy
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)

# Usuń pliki tymczasowe
if delete_output:
	os.remove(output_path)
	if os.path.exists(temp_file_path):
		os.remove(temp_file_path)

Poniżej znajduje się obraz wyjściowy, który otrzymaliśmy po scaleniu obrazów w poziomie.

Scal obrazy poziomo w Python

Łącz obrazy w pionie w Python

Zobaczmy teraz, jak scalić wiele obrazów w pionie. Kroki łączenia obrazów w pionie byłyby takie same jak w poprzedniej sekcji. Jedyna różnica polega na tym, że zamienilibyśmy role właściwości wysokości i szerokości.

Poniższy przykładowy kod pokazuje, jak scalać obrazy w układzie pionowym w języku 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

# Zdefiniuj foldery
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")

# Uzyskaj wynikowy rozmiar obrazu
image_sizes = []
for image_path in image_paths:
	with Image.load(image_path) as image:
		image_sizes.append(image.size)

# Oblicz nowy rozmiar
new_width = 0
new_height = 0
for size in image_sizes:
	new_height += size.height
	new_width = max(new_width, size.width)
	
# Połącz obrazy w nowy
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)

# Usuń pliki tymczasowe
if delete_output:
	os.remove(output_path)

Poniższy obraz przedstawia wynik scalania dwóch podobnych obrazów w pionie.

Scal obrazy w pionie w Python

Scal obrazy PNG w Python

Kroki i przykłady kodu podane w poprzednich sekcjach dotyczyły scalania obrazów JPG, jednak może być konieczne również scalanie obrazów PNG. Nie musisz się martwić. Te same kroki i przykładowy kod dotyczą obrazów PNG, a jedyną zmianą byłoby użycie klas PngImage i PngOptions zamiast odpowiednio JpegImage i JpegOptions.

Uzyskaj bezpłatną bibliotekę scalania obrazów Python

Możesz uzyskać bezpłatną tymczasową licencję i scalić obrazy bez ograniczeń ewaluacyjnych.

Połącz obrazy online

Możesz również skorzystać z naszego bezpłatnego narzędzia do łączenia obrazów, aby połączyć swoje obrazy online. To narzędzie jest oparte na Aspose.Imaging for Python i nie musisz tworzyć dla niego konta.

Wniosek

Ten artykuł dostarczył Ci jednego z najlepszych i najprostszych rozwiązań do łączenia wielu obrazów w jeden obraz w Python. Poziome i pionowe łączenie obrazu jest zademonstrowane za pomocą próbek kodu. Ponadto udostępniliśmy narzędzie online do bezpłatnego łączenia obrazów.

Możesz dowiedzieć się więcej o bibliotece przetwarzania obrazów w Python, odwiedzając dokumentację. Możesz także podzielić się z nami swoimi pytaniami za pośrednictwem naszego forum.

Zobacz też