Редактирование изображений широко используется для повышения качества изображений. С появлением мобильных камер и приложений для редактирования изображений каждый мобильный пользователь знает, как редактировать изображение. Среди других функций редактирования изображений популярным является создание коллажей, в которых несколько изображений объединяются в одно изображение. Итак, в этой статье мы покажем, как объединить несколько изображений в Python. Это может быть полезно для вас, если вы имеете дело с редактированием изображений в своем приложении Python.
- Библиотека Python для слияния изображений
- Объединение нескольких изображений в Python
- Объединение изображений PNG в 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.
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)
На следующем изображении показан результат объединения двух похожих изображений по вертикали.
Объединение изображений PNG в Python
Шаги и примеры кода, приведенные в предыдущих разделах, предназначались для объединения изображений JPG, однако вам может понадобиться также объединить изображения PNG. Не нужно беспокоиться. Те же шаги и пример кода действительны для изображений PNG, и единственным изменением будет использование классов PngImage и PngOptions вместо JpegImage и JpegOptions соответственно.
Получите бесплатную библиотеку слияния изображений Python
Вы можете получить бесплатную временную лицензию и объединить изображения без ограничений на оценку.
Объединить изображения онлайн
Вы также можете использовать наш бесплатный инструмент для слияния изображений, чтобы объединить свои изображения в Интернете. Этот инструмент основан на Aspose.Imaging for Python, и вам не нужно создавать для него учетную запись.
Заключение
В этой статье вы найдете одно из лучших и самых простых решений для объединения нескольких изображений в одно изображение в Python. Слияние изображений по горизонтали и вертикали демонстрируется с помощью примеров кода. Кроме того, мы познакомили вас с онлайн-инструментом для бесплатного объединения изображений.
Вы можете узнать больше о библиотеке обработки изображений Python, посетив документацию. Кроме того, вы можете поделиться с нами своими вопросами через наш форум.