본문 바로가기

code 공부

큰 이미지를 downsampling하는 코드

1. 이미지 별로 진행

from PIL import Image

def downsample_image(image_path, target_width):
    # 이미지 열기
    img = Image.open(image_path)

    # 원본 이미지 크기 확인
    original_width, original_height = img.size

    # 가로 길이를 512로 맞추기 위해 새로운 높이 계산
    target_height = int((target_width / original_width) * original_height)

    # 이미지를 가로 길이 512로 다운샘플링
    downscaled_img = img.resize((target_width, target_height), Image.LANCZOS)

    return downscaled_img

# 입력 이미지 파일 경로와 타겟 가로 길이(512)를 넣어서 다운샘플링된 이미지 얻기
input_image_path = "인풋이미지경로/이미지이름.jpg"
target_width = 512
downsampled_image = downsample_image(input_image_path, target_width)

# 다운샘플링된 이미지 저장 (옵션)
downsampled_image.save("저장할 경로/저장할 이름.jpg")

 

2. 폴더 내에 있는 이미지 전부 다 진행

import os
from PIL import Image

def get_next_filename(folder_path, base_filename):
    i = 1
    filename = f"{base_filename}_{i}.jpg"
    while os.path.exists(os.path.join(folder_path, filename)):
        i += 1
        filename = f"{base_filename}_{i}.jpg"
    return filename

def downsample_images_in_folder(input_folder, target_width, output_folder):
    # 입력 폴더 내의 모든 이미지 파일 가져오기
    image_files = [file for file in os.listdir(input_folder) if file.lower().endswith(('.jpg', '.jpeg', '.png'))]

    for image_file in image_files:
        # 이미지 파일 경로 생성
        input_image_path = os.path.join(input_folder, image_file)

        # 이미지 열기
        img = Image.open(input_image_path)

        # 원본 이미지 크기 확인
        original_width, original_height = img.size

        # 가로 길이를 512로 맞추기 위한 새로운 높이 계산
        target_height = int((target_width / original_width) * original_height)

        # 이미지를 가로 길이 512로 다운샘플링
        downscaled_img = img.resize((target_width, target_height), Image.LANCZOS)

        # 이미지 저장을 위한 새로운 파일 이름 생성
        base_filename = os.path.splitext(os.path.basename(image_file))[0]
        new_filename = get_next_filename(output_folder, base_filename)

        # 다운샘플링된 이미지 저장
        downscaled_img.save(os.path.join(output_folder, new_filename))

# 입력 이미지가 있는 폴더 경로와 출력 이미지를 저장할 폴더 경로 지정
input_folder = "인풋 이미지들이 있는 경로"
output_folder = "출력 이미지들 저장할 경로"
target_width = 512

# 이미지 다운샘플링 및 저장
downsample_images_in_folder(input_folder, target_width, output_folder)

 

가로 512에 맞추어 다운샘플링 하는 코드

이 상태에서 아웃페인팅 512로 진행하면 위로만 아웃페인팅이 진행되면서 상하 좌우를 모두 하는것보다 자연스러움