프로그래밍 언어/Python

이미지 배열하기

· 코딩마이데이

콜라주는 여러 개의 이미지를 하나의 이미지로 조화롭게 배치하는 기법입니다. 아름다운 콜라주를 만들기 위해서는 이미지의 크기, 위치 등을 세심하게 고려해야 합니다. 하나의 큰 배경 이미지를 생성하고, 그 위에 개뱔 이미지를 불러와 알맞은 위치에 삽입하면 됩니다.

완성된 이미지 콜라주에 텍스트 메시지를 추가하는 방법도 다릅니다

 

이미지 가로 배치

이제부터 6개의 이미지를 가로로 나란히 배치해 보겠습니다. 먼저, 개발 이미지의 개수와 크기를 고려하여 배경 이미지를 만듭니다. 이어서 삽입될 모든 이미지의 크기를 가로세로 500px로 조정한 후, 이를 배경 이미지 위에 붙이면 됩니다.

비주얼 스튜디오 코드에서 새로운 파일을 생성하고 파일명을 'step_3_1.py'로 변경하세요. 다음 코드를 입력한 뒤, 대화형 창에서 실행하면 'output' 폴더에 8개의 이미지가 나란히 배치된 이미지 콜라주가 저장됩니다.

from pathlib import Path
from PIL import Image, ImageOps
from step_1_1 import IMG_DIR, OUT_DIR # 이전에 작성한 모듈을 불러옵니다.

ROWS, COLS = 1, 8 # 1행 8열 # 05
W_IMG, H_IMG = 500, 500 # 개별 이미지 크기
W_BG, H_BG = COLS * W_IMG, ROWS * H_IMG # 배경 이미지 크기 # 07
start_x, start_y = 0, 0 # 개별 이미지 시작점 좌표 # 08
img_bg = Image.new(mode='RGB', size=(W_BG, H_BG)) # 09
path_sorted = sorted(Path(IMG_DIR).glob("*.jpg")) # 10
for path in path_sorted: # 11
    img = Image.open(path) # 12
    img_fit = ImageOps.fit(img, (W_IMG, H_IMG)) # 13
    img_bg.paste(img_fit, box=(start_x, start_y)) # 14
    start_x += W_IMG # 15

img_bg.save(OUT_DIR / f"{Path(__file__).stem}.jpg") # 17

 

[실행결과]

 

05 ROWS와 COLS는 이미지 콜라주의 행과 열에 삽입될 이미지의 개수입니다.

07 W_BG와 H_BG는 배경 이미지의 가로와 세로 크기입니다. 여기서는 8개의 이미지를 가로 1행으로 배치할 것이므로 가로는 500*8=4000px, 세로는 500px입니다.

08 start_x와 start_y는 개별 이미지가 배치될 위치인 x, y 좌표를 의미합니다. 시작점 좌표를 각각 0으로 설정합니다.

09 함수 new()를 사용하여 배경 이미지를 생성합니다.

10 함수 sorted()를 사용하여 JPG 이미지 경로를 오름차순으로 정렬한 뒤, 그 결과를 path_sorted에 저장합니다.

11~12 함수 open()을 사용하여 JPG 이미지를 path_sorted에 정렬된 순서대로 불러옵니다.

13 함수 fit()을 사용하여 이미지 크기를 가로세로 500px로 조정합니다.

14 함수 paste()를 사용하여 (start_x, start_y) 좌표에 이미지를 붙여 넣습니다. 최초 시작점은 (0, 0)입니다.

15 start_x에 500을 더해 이미지의 가로 크기만큼 좌표를 이동시킵니다. 따라서 다음에 삽입될 이미지는 현재보다 오른쪽에 배치됩니다.

17 save() 함수를 사용하여 'output' 폴더에 ‘step_3_1.jpg’ 파일로 저장합니다.

 

5행 8열로 이미지 배치

이제 변수 start_y의 값을 변경해 가며 5행과 8열의 콜라주를 완성해 봅시다. 8개의 이미지를 배치한 후 start_y 값을 변경하는 것이 핵심입니다. 또한 여기서 생성한 이미지 콜라주를 다음에 쉽게 불러올 수 있도록 이미지 경로를 변수에 저장할 것입니다.

비주얼 스튜디오 코드에서 새로운 파일을 생성하고, 파일명을 'step_3_2.py'로 변경합니다. 다음 코드를 입력한 뒤, 대화형 창에서 실행하면 'output' 폴더에 총 40개의 이미지가 5행 8열로 배치된 이미지 콜라주가 생성됩니다.

from pathlib import Path
from PIL import Image, ImageOps
from step_1_1 import IMG_DIR, OUT_DIR # 이전에 작성한 모듈을 불러옵니다.

OUT_3_2 = OUT_DIR / f"{Path(__file__).stem}.jpg"

if __name__ == "__main__":
    ROWS, COLS = 5, 8 # 5행 8열 # 08
    W_IMG, H_IMG = 500, 500  # 개별 이미지 크기
    W_BG, H_BG = COLS * W_IMG, ROWS * H_IMG  # 배경 이미지 크기
    start_x, start_y = 0, 0  # 개별 이미지 시작점 좌표

    img_bg = Image.new(mode="RGB", size=(W_BG, H_BG))
    path_sorted = sorted(Path(IMG_DIR).glob("*.jpg"))
    for path in path_sorted:
        img = Image.open(path)
        img_fit = ImageOps.fit(img, (W_IMG, H_IMG))
        img_bg.paste(img_fit, box=(start_x, start_y))
        start_x += W_IMG # 19
        if start_x >= W_BG:
            start_x = 0
            start_y += H_IMG
    
    img_bg.save(OUT_3_2)

 

[실행결과]

 

08 ROWS에 5, COLS에 8을 저장하여 이미지를 5행 8열로 배치하겠습니다.

19 x 좌표가 4000 이상인 경우, 즉 가로 8칸의 모두 채운 경우에는 다음 행으로 이동하기 위해서 start_x를 0으로 초기화하고, start_y에 500을 더합니다.

 

'프로그래밍 언어 > Python' 카테고리의 다른 글

QR 코드 기초 다지기  (0) 2025.12.05
이미지 콜라주에 메시지 남기기  (0) 2025.12.02
이미지 합성하기  (0) 2025.11.26
이미지 크기 변경하기  (0) 2025.11.23
이미지 처리 기본 익히기  (0) 2025.11.17