본문 바로가기

code 공부

이미지 리사이징 code

from PIL import Image

target_width, target_height = 512, 512 # target 너비 높이 지정
image_path = "이미지 경로 넣기"  


source_image = Image.open(image_path)

width, height = source_image.size # 이미지의 현재 너비 높이 가져오기
aspect_ratio = width / height # 너비 높이 비율계산

if width < target_width or height < target_height: # 이미지의 크기를 조정해야 할 경우 새로운 너비 높이 계산. Image.LANCZOS는 PIL에서 제공하는 리샘플링 필터 중 하나(이미지 크기 변경 시 이미지 품질 유지하기 위해서)
    if aspect_ratio < 1:
        new_width = target_width
        new_height = int(target_width / aspect_ratio)
    else:
        new_height = target_height
        new_width = int(target_height * aspect_ratio)
    
    source_image = source_image.resize((new_width, new_height), Image.LANCZOS) # 새로운 크기로 이미지 사이즈 조정
    
else:# 이미지가 512보다 큰 경우 이미지를 가운데로 자름
    left = (width - target_width) // 2
    upper = (height - target_height) // 2
    right = left + target_width
    lower = upper + target_height
    source_image = source_image.crop((left, upper, right, lower))


target_image = Image.new("RGB", (target_width, target_height), color="black") # 512 크기의 빈 캔버스 생성

# 사이즈 조정된 이미지를 캔버스에 붙여넣기
paste_left = (target_width - source_image.width) // 2
paste_upper = (target_height - source_image.height) // 2
target_image.paste(source_image, (paste_left, paste_upper))


target_image.show()