Mesclar imagens em Python

A edição de imagem é imensamente usada para melhorar a qualidade das imagens. Com o surgimento de câmeras móveis e aplicativos de edição de imagem, todo usuário móvel sabe como editar uma imagem. Entre outros recursos de edição de imagens, a criação de colagens é popular, na qual várias imagens são combinadas em uma única imagem. Portanto, neste artigo, demonstraremos como mesclar várias imagens em Python. Isso pode ser útil se você estiver lidando com edição de imagens em seu aplicativo Python.

Biblioteca Python para mesclar imagens

Para mesclar várias imagens em uma única imagem, usaremos Aspose.Imaging for Python. É uma biblioteca de processamento de imagem rica em recursos para executar várias operações de edição de imagem sem esforço. Você pode baixar a biblioteca ou instalá-la usando o seguinte comando.

> pip install aspose-imaging-python-net 

Mesclar várias imagens em Python

Existem duas maneiras de mesclar imagens: verticalmente e horizontalmente. Você pode escolher o método adequado. Vamos dar uma olhada em como combinar imagens de ambas as maneiras nas seções a seguir.

Mesclar imagens horizontalmente em Python

Abaixo estão as etapas para mesclar as imagens horizontalmente usando Aspose.Imaging para Python.

  • Comece especificando os caminhos das imagens em uma matriz.
  • Em seguida, calcule a altura e a largura da imagem resultante.
  • Crie um objeto da classe JpegOptions e defina as opções necessárias.
  • Crie um objeto da classe JpegImage e inicialize-o com o objeto JpegOptions e a altura e largura da imagem resultante.
  • Percorra a lista de imagens e carregue cada imagem usando a classe RasterImage.
  • Crie um retângulo para cada imagem e adicione-o à imagem resultante usando o método JpegImage.saveargb32pixels().
  • Aumente a largura do ponto em cada iteração.
  • Finalmente, salve a imagem resultante usando o método JpegImage.save(string).

Abaixo está o código para mesclar imagens horizontalmente em 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

# Defina as pastas
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")

# Obtenha o tamanho da imagem resultante
image_sizes = []
for image_path in image_paths:
	with Image.load(image_path) as image:
		image_sizes.append(image.size)

# Calcular novo tamanho
new_width = 0
new_height = 0
for size in image_sizes:
	new_width += size.width
	new_height = max(new_height, size.height)
	
# Combine imagens em uma nova
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)

# Excluir arquivos temporários
if delete_output:
	os.remove(output_path)
	if os.path.exists(temp_file_path):
		os.remove(temp_file_path)

Abaixo está a imagem de saída que obtivemos após mesclar as imagens horizontalmente.

Mesclar imagens horizontalmente em Python

Combinar imagens verticalmente em Python

Vamos agora ver como mesclar várias imagens verticalmente. As etapas para mesclar imagens verticalmente seriam as mesmas da seção anterior. A única diferença é que trocaríamos as funções das propriedades de altura e largura.

O exemplo de código a seguir mostra como mesclar imagens em um layout vertical em 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

# Definir pastas
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")

# Obtenha o tamanho da imagem resultante
image_sizes = []
for image_path in image_paths:
	with Image.load(image_path) as image:
		image_sizes.append(image.size)

# Calcular novo tamanho
new_width = 0
new_height = 0
for size in image_sizes:
	new_height += size.height
	new_width = max(new_width, size.width)
	
# Combine imagens em uma nova
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)

# Excluir arquivos temporários
if delete_output:
	os.remove(output_path)

A imagem a seguir mostra o resultado da mesclagem vertical de duas imagens semelhantes.

Mesclar imagens verticalmente em Python

Mesclar imagens PNG em Python

As etapas e exemplos de código fornecidos nas seções anteriores foram para mesclar imagens JPG; no entanto, talvez seja necessário mesclar imagens PNG também. Não precisa se preocupar. As mesmas etapas e amostra de código são válidas para imagens PNG e a única alteração seria usar as classes PngImage e PngOptions em vez de JpegImage e JpegOptions, respectivamente.

Obtenha a biblioteca gratuita de mesclagem de imagens Python

Você pode obter uma licença temporária gratuita e mesclar as imagens sem limitações de avaliação.

Mesclar imagens on-line

Você também pode usar nossa ferramenta gratuita de mesclagem de imagens para mesclar suas imagens online. Esta ferramenta é baseada no Aspose.Imaging for Python e você não precisa criar uma conta para ela.

Conclusão

Este artigo forneceu uma das melhores e mais simples soluções para mesclar várias imagens em uma única imagem em Python. A fusão de imagem horizontal e vertical é demonstrada com a ajuda de amostras de código. Além disso, apresentamos a você uma ferramenta online para mesclar imagens gratuitamente.

Você pode explorar mais sobre a biblioteca de processamento de imagem Python visitando a documentação. Além disso, você pode compartilhar suas dúvidas conosco através do nosso fórum.

Veja também