풀프레임 카메라에서 APS-C 규격의 렌즈를 사용하게 되면, 이미지 서클을 벗어나는 영역에 비네팅이 생기는데, 이를 한번에 잘라내는 스크립트를 짜보기로 한다.
related posting list
물론, 내가 아니라 chatGPT가 짠다.
기능은 단순하다.
-이미지를 선택한다.
-상하좌우 10%씩을 잘라낸다.
-가로900px로 이미지를 변경하고, 저장한다.
물론, 가로가 장축인 경우에만 사용할 수 있다. 블로그에는 대부분 landscape 타입 이미지만 사용하니, 일단 이대로만 사용한다.
예시를 본다.
아래와 같은 사진이 찍힌다.

크롭하고, 이미지 사이즈를 변경한 결과는 다음과 같다.

음... 역시 chatGPT는 간단한 파이썬 프로그래밍은 기똥차게 해낸다.
from PIL import Image
import os
from tkinter import Tk, filedialog
MAX_WIDTH = 900 # 리사이즈 최대 가로 크기(px)
def crop_and_resize(image_path, output_folder):
try:
img = Image.open(image_path)
width, height = img.size
# 잘라낼 영역 (10%씩)
left = width * 0.1
top = height * 0.1
right = width * 0.9
bottom = height * 0.9
cropped_img = img.crop((left, top, right, bottom))
# 리사이즈 (width > MAX_WIDTH이면)
new_width, new_height = cropped_img.size
if new_width > MAX_WIDTH:
ratio = MAX_WIDTH / new_width
new_height = int(new_height * ratio)
cropped_img = cropped_img.resize((MAX_WIDTH, new_height), Image.LANCZOS)
# 파일명에 _trim_900 추가
filename, ext = os.path.splitext(os.path.basename(image_path))
save_filename = f"{filename}_trim_{MAX_WIDTH}{ext}"
save_path = os.path.join(output_folder, save_filename)
cropped_img.save(save_path)
print(f"저장 완료: {save_path}")
except Exception as e:
print(f"에러 ({image_path}): {e}")
if __name__ == "__main__":
root = Tk()
root.withdraw()
# 파일 선택
file_paths = filedialog.askopenfilenames(
title="이미지 파일 선택",
filetypes=[("이미지 파일", "*.jpg;*.jpeg;*.png;*.webp;*.bmp;*.tiff")]
)
if not file_paths:
print("이미지를 선택하지 않았습니다.")
exit()
# 저장 폴더 선택
output_folder = filedialog.askdirectory(title="저장 폴더 선택")
if not output_folder:
print("저장 폴더를 선택하지 않았습니다.")
exit()
for path in file_paths:
crop_and_resize(path, output_folder)
print("모든 작업 완료!")
끝.
728x90