Об’єднати зображення в Python

Редагування зображень широко використовується для покращення якості зображень. З появою мобільних камер і програм для редагування зображень кожен мобільний користувач знає, як редагувати зображення. Серед інших функцій редагування зображень популярне створення колажів, у якому кілька зображень поєднуються в одне зображення. Тож у цій статті ми продемонструємо, як об’єднати кілька зображень у Python. Це може бути корисним для вас, якщо ви маєте справу з редагуванням зображень у своїй програмі Python.

Бібліотека Python для об’єднання зображень

Щоб об’єднати кілька зображень в одне, ми використаємо Aspose.Imaging for Python. Це багатофункціональна бібліотека обробки зображень, яка дозволяє без зусиль виконувати кілька операцій редагування зображень. Ви можете завантажити бібліотеку або встановити її за допомогою наступної команди.

> pip install aspose-imaging-python-net 

Об’єднайте кілька зображень у Python

Існує два способи об’єднання зображень: вертикальний і горизонтальний. Ви можете вибрати підходящий спосіб. У наступних розділах розглянемо, як комбінувати зображення обома способами.

Об’єднайте зображення по горизонталі в Python

Нижче наведено кроки для горизонтального об’єднання зображень за допомогою Aspose.Imaging for Python.

  • Почніть із визначення шляхів зображень у масиві.
  • Потім обчисліть висоту та ширину отриманого зображення.
  • Створіть об’єкт класу JpegOptions і задайте необхідні параметри.
  • Створіть об’єкт класу JpegImage та ініціалізуйте його об’єктом JpegOptions і висотою та шириною отриманого зображення.
  • Перегляньте список зображень і завантажте кожне зображення за допомогою класу RasterImage.
  • Створіть прямокутник для кожного зображення та додайте його до отриманого зображення за допомогою методу JpegImage.saveargb32pixels().
  • Збільшуйте ширину шва в кожній ітерації.
  • Нарешті, збережіть отримане зображення за допомогою методу JpegImage.save(string).

Нижче наведено код для горизонтального об’єднання зображень у 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

# Визначте папки
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")

# Отримайте кінцевий розмір зображення
image_sizes = []
for image_path in image_paths:
	with Image.load(image_path) as image:
		image_sizes.append(image.size)

# Розрахувати новий розмір
new_width = 0
new_height = 0
for size in image_sizes:
	new_width += size.width
	new_height = max(new_height, size.height)
	
# Об’єднайте зображення в одне
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)

# Видалити тимчасові файли
if delete_output:
	os.remove(output_path)
	if os.path.exists(temp_file_path):
		os.remove(temp_file_path)

Нижче наведено вихідне зображення, яке ми отримали після об’єднання зображень по горизонталі.

Об’єднайте зображення по горизонталі в Python

Комбінуйте зображення вертикально в Python

Тепер подивимося, як об’єднати кілька зображень по вертикалі. Етапи об’єднання зображень по вертикалі будуть такими ж, як і в попередньому розділі. Єдина відмінність полягає в тому, що ми б поміняли ролі властивостей height і width.

У наступному прикладі коду показано, як об’єднати зображення у вертикальному макеті в 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

# Визначення папок
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")

# Отримайте кінцевий розмір зображення
image_sizes = []
for image_path in image_paths:
	with Image.load(image_path) as image:
		image_sizes.append(image.size)

# Розрахувати новий розмір
new_width = 0
new_height = 0
for size in image_sizes:
	new_height += size.height
	new_width = max(new_width, size.width)
	
# Об’єднайте зображення в одне
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)

# Видалити тимчасові файли
if delete_output:
	os.remove(output_path)

На наступному зображенні показано результат об’єднання двох схожих зображень по вертикалі.

Об’єднайте зображення вертикально в Python

Об’єднайте зображення PNG у Python

Кроки та зразки коду, наведені в попередніх розділах, стосувалися об’єднання зображень у форматі JPG, однак вам може знадобитися також об’єднати зображення у форматі PNG. Не варто хвилюватися. Ті самі кроки та зразок коду дійсні для зображень PNG, і єдиною зміною буде використання класів PngImage та PngOptions замість JpegImage та JpegOptions відповідно.

Отримайте безкоштовну бібліотеку об’єднання зображень Python

Ви можете отримати безкоштовну тимчасову ліцензію та об’єднати зображення без обмежень оцінки.

Об’єднання зображень онлайн

Ви також можете скористатися нашим безкоштовним інструментом об’єднання зображень, щоб об’єднати свої зображення онлайн. Цей інструмент заснований на Aspose.Imaging for Python, і вам не потрібно створювати для нього обліковий запис.

Висновок

Ця стаття надала вам одне з найкращих і найпростіших рішень для об’єднання кількох зображень в одне зображення в Python. Горизонтальне і вертикальне злиття зображень демонструється за допомогою прикладів коду. Крім того, ми представили вам онлайн-інструмент для безкоштовного об’єднання зображень.

Ви можете дізнатися більше про бібліотеку обробки зображень Python, відвідавши документацію. Крім того, ви можете поділитися своїми запитами з нами через наш форум.

Дивись також