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()
'code 공부' 카테고리의 다른 글
큰 이미지를 downsampling하는 코드 (0) | 2023.07.25 |
---|---|
탐욕 알고리즘(Greedy Algorithm), 매트로이드 구조(Matroid Theory) (0) | 2023.05.18 |
파이썬 파일 불러올 때 \UXXXXXXXX escape 에러 해결법 (0) | 2023.05.03 |