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
- Połącz wiele obrazów w Python
- Łącz obrazy PNG w Python
- Połącz obrazy online
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.
Łą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 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.