[Python] 파이썬 여러 개의 이미지를 하나의 이미지로 합치는 방법
본문 바로가기

[Python] 파이썬 여러 개의 이미지를 하나의 이미지로 합치는 방법

액트 2023. 10. 27.
반응형

소개

다중 이미지를 합치는 방법에 대해 소개해드리고자 합니다. 크기가 다른 여러 이미지 합치기 또는 세로로 이미지 합치기, 가로로 이미지 합치기 등 다양한 이미지 합치는 방법이 존재합니다.

먼저 이미지를 합치기 위해서는 일반적으로 PIL 라이브러리 (혹은 Pillow로도 알려져 있음)를 사용해야 합니다. 필요한 아리브러리를 다음과 같이 설치합니다.

pip install Pillow

함수 코드 작성

from PIL import Image
import os

def merge_images_vertically(image_paths, output_path):
    images = [Image.open(x) for x in image_paths]

    # 이미지의 가로 사이즈는 첫 번째 이미지의 가로 사이즈와 동일하게, 세로 사이즈는 모든 이미지의 세로 사이즈의 합으로 설정
    combined_image = Image.new('RGB', (images[0].width, sum(i.height for i in images)))

    y_offset = 0
    for img in images:
        combined_image.paste(img, (0, y_offset))
        y_offset += img.height

    combined_image.save(output_path)


def merge_images_horizontally(image_paths, output_path):
    images = [Image.open(x) for x in image_paths]

    # 이미지의 세로 사이즈는 첫 번째 이미지의 세로 사이즈와 동일하게, 가로 사이즈는 모든 이미지의 가로 사이즈의 합으로 설정
    combined_image = Image.new('RGB', (sum(i.width for i in images), images[0].height))

    x_offset = 0
    for img in images:
        combined_image.paste(img, (x_offset, 0))
        x_offset += img.width

    combined_image.save(output_path)

세로로 이미지 합치기

# 예제 사용법
image_files = ["path_to_image1.jpg", "path_to_image2.jpg", "path_to_image3.jpg"]
merge_images_vertically(image_files, "output_vertical.jpg")

가로로 이미지 합치기

# 예제 사용법
image_files = ["path_to_image1.jpg", "path_to_image2.jpg", "path_to_image3.jpg"]
merge_images_horizontally(image_files, "output_horizontal.jpg")

위 코드를 사용하면 여러 개의 이미지를 세로로 또는 가로로 연결하여 하나의 이미지로 저장할 수 있습니다. image_files 리스트에 병합하려는 이미지 경로를 지정하고, merge_images_vertically 함수나 merge_images_horizontally 함수를 호출하여 이미지를 병합하면 됩니다.

크기가 다른 이미지 이미지 합치는 방법

예시로 4개의 크기가 다른 이미지를 하나의 이미지로 합치는 방법에 대해 소개하겠습니다. 먼저 크기가 다른 이미지를 하나의 이미지로 합치려면 각 이미지의 위치와 크기를 어떻게 배치할 것인지를 정해야 합니다.

가장 간단한 방법으로는 2x2 그리드 형식으로 이미지를 배치하고 각 이미지를 해당 그리드에 맞게 크기를 조절하는 방법입니다. 결과적으로 4개의 이미지가 동일한 크기의 그리드안에 배치됩니다.

from PIL import Image

def merge_4_images(image_paths, output_path, grid_size=(800, 800)):
    # 이미지를 불러옴
    images = [Image.open(img_path) for img_path in image_paths]

    # 새로운 이미지를 생성 (총 크기는 grid_size x 2)
    combined_image = Image.new('RGB', (grid_size[0]*2, grid_size[1]*2))

    # 이미지를 그리드 크기에 맞게 조절하고 합침
    for i, img in enumerate(images):
        # 이미지 크기 조절
        img = img.resize(grid_size, Image.ANTIALIAS)

        # 이미지를 적절한 위치에 붙임
        combined_image.paste(img, (grid_size[0] * (i % 2), grid_size[1] * (i // 2)))

    # 결과 이미지 저장
    combined_image.save(output_path)

# 예제 사용법
image_files = ["path_to_image1.jpg", "path_to_image2.jpg", "path_to_image3.jpg", "path_to_image4.jpg"]
merge_4_images(image_files, "output.jpg")

이 코드는 grid_size를 800x800으로 설정하고, 4개의 이미지를 이 크기에 맞게 조절한 후 2x2 그리드로 합칩니다. grid_size는 필요에 따라 변경할 수 있습니다.

반응형

댓글