GENERAL

AI 시대, 그리드를 이용한 이미지 생성 노하우

GENERAL
2026-01-28

AI로 이미지를 만들다 보면 한 번에 여러 장의 이미지가 필요할 때가 있다. 하지만 한 장씩 생성하자니 생성 횟수 제한(Limit)에 걸리기도 하고, 시간도 너무 오래 걸려서 답답했던 경험이 다들 있을 거다.

그래서 나는 '그리드(Grid)' 방식으로 이 문제를 해결하고 있다. 핵심은 간단하다. 이미지 한 장을 만들 때, 그 안에 내가 필요한 비율의 작은 이미지 여러 개를 꽉 채워서 그려달라고 요청하는 것이다.

6장 같은 1장 만들기

예를 들어 세로 비율(9:16)의 이미지 6장이 필요하다면, 프롬프트에 이렇게 요청한다.

1:1 정사각형 캔버스 안에 9:16 비율의 패널 6개를 3x2 그리드(가로 3칸, 세로 2줄) 형태로 꽉 채워서 그려줘. 테두리나 여백 없이(Seamless) 딱 붙여서 말이야.

물론 이렇게 말로만 하면 AI가 못 알아듣는 경우가 많아서 나만의 프롬프트 노하우가 좀 들어갔지만, 요지는 '큰 도화지 한 장에 작은 그림 여러 개를 바둑판처럼 배치한다'는 것이다. 이렇게 하면 생성 버튼 한 번만 눌러도 6장의 결과물을 한 방에 얻을 수 있다.

AI Grid ExampleAI Grid Example

수학적 계산을 곁들인 자동 크롭

이렇게 생성된 '바둑판 이미지'를 일일이 포토샵 켜서 자르냐고? AI시대 아닌가?! 그것도 귀찮아서 AI에게 요구사항을 전달해서 파이썬 스크립트를 짰다.

전체 이미지 사이즈(예: 1024x1024)를 알면, 3x2 그리드일 때 각 타일의 좌표는 수학적으로 정확하게 떨어지게 되는 것이다.

이 스크립트만 돌리면 100장의 바둑판 이미지도 순식간에 수백 장의 개별 파일로 깔끔하게 잘려서 저장된다. 3x3이든 2x3이든, 내가 처음에 요청한 그리드 구조만 알면 어떤 형태든 가능하다.

결국 이 노하우의 핵심은 AI의 생성 효율을 높이고, 귀찮은 반복 작업은 코드로 해결한다는 것에 있다. 비용도 아끼고 시간도 버는, 그야말로 일석이조의 꿀팁이다.

파이썬 크롭 스크립트 예시

아래 코드는 기본적인 예시다. 각자의 폴더 경로나 파일명 규칙이 다를 테니, 사용 중인 AI(ChatGPT, Claude, Gemini 등)에게 이 코드를 던져주고 본인 환경에 맞게 수정해달라고 요청해서 쓰면 된다.

(실행 전 pip install Pillow 필요)

PYTHON
import os
import glob
from PIL import Image

def split_grid_image(image_path, output_dir):
    """
    1:1 정사각형 캔버스 안의 3x2 그리드를 6개의 9:16 이미지로 분할
    """
    if not os.path.exists(image_path):
        print(f"[Error] 파일을 찾을 수 없습니다: {image_path}")
        return

    os.makedirs(output_dir, exist_ok=True)
    img = Image.open(image_path)
    width, height = img.size
    
    # 3열(Columns) x 2행(Rows) 크기 계산
    tile_w = width // 3
    tile_h = height // 2
    
    count = 1
    for row in range(2):
        for col in range(3):
            left = col * tile_w
            top = row * tile_h
            right = left + tile_w
            bottom = top + tile_h
            
            # 이미지 자르기 (Crop)
            tile = img.crop((left, top, right, bottom))
            
            # 저장 파일명: 원본명_1.png, 원본명_2.png ...
            base_name = os.path.basename(image_path)
            name, ext = os.path.splitext(base_name)
            save_name = f"{name}_{count}{ext}"
            
            tile.save(os.path.join(output_dir, save_name))
            count += 1
            
    print(f"[SUCCESS] {base_name} -> 6장 분할 완료")

if __name__ == "__main__":
    # 사용 예시: 'downloads' 폴더에 있는 모든 png 파일을 잘라서 'split_output'에 저장
    target_files = glob.glob("./downloads/*.png")
    
    for img_path in target_files:
        split_grid_image(img_path, "./split_output")

이 코드 하나면 생성 버튼 한 번으로 만든 이미지가 순식간에 6장의 영상 소스로 변신한다.