혼자 만들면서 공부하는 파이썬
2025.07.07 ~ 2025.07.13
pillow
를 사용해서 이미지를 처리한다.진도: Chapter 03
기본 숙제(필수): Ch.03(03-1, 03-2) 이미지 가공(크기 변경, 합성) 후 결과 화면 캡처하기
PIL.Image 모듈로 이미지를 불러오고
from PIL import Image
from step_1_1 import IMG_DIR # 이전에 작성한 모듈을 불러옵니다.
img = Image.open(IMG_DIR / "img_001.jpg")
img
from PIL import ImageDraw
draw = ImageDraw.Draw(img)
draw.text(
xy=(10, 100),
text="Hello World!",
fill=(255, 255, 255),
font_size=100,
)
img.show()
.py 파일로 실행했기 때문에 img.show()
를 통해서 이미지를 표시해 줄 수 있다.
이미지 크기 변경
from PIL import Image
from step_1_1 import IMG_DIR # 이전에 작성한 모듈을 불러옵니다.
img = Image.open(IMG_DIR / "img_001.jpg")
print(f"{img.size=}, {img.format=}, {img.mode=}")
img.show()
SIZE = (500, 500)
img_resize = img.resize(SIZE)
print(f"{img_resize.size=}")
img_resize.show()
from PIL import ImageOps
img_cont = ImageOps.contain(img, SIZE)
print(f"{img_cont.size = }")
img_cont.show()
이미지 합성하기
위 야자수랑 그레이 바탕의 이미지를 합성도 해본다.
from PIL import Image
from step_1_1 import IMG_DIR # 이전에 작성한 모듈을 불러옵니다.
SIZE = (500, 500)
img = Image.open(IMG_DIR / "img_001.jpg")
img_resize = img.resize(SIZE)
img_black = Image.new(mode="RGBA", size=SIZE, color=(0, 0, 0, 153))
img_comp = Image.alpha_composite(img_resize.convert("RGBA"), img_black)
img_comp.show()
Ch03(03-3) 이미지 콜라주 실행 결과 화면 캡처하기
from pathlib import Path
from PIL import Image, ImageDraw, ImageFont
from step_1_1 import IN_DIR, OUT_DIR # 이전에 작성한 모듈을 불러옵니다.
from step_3_2 import OUT_3_2
img_raw = Image.open(OUT_3_2)
text = "2023년의 발리, 그 황홀했던 순간들" # 이미지에 추가할 메시지
font = ImageFont.truetype(IN_DIR / "Pretendard-Bold.ttf", size=100)
left, top, right, bottom = font.getbbox(text)
pad = 20 # 여백
bg_width = pad + right + pad # 메시지 너비에 여백 추가
bg_height = pad + bottom + pad # 메시지 높이에 여백 추가
img_bg = Image.new("RGBA", size=img_raw.size) # 배경 이미지 생성
draw_bg = ImageDraw.Draw(img_bg) # 배경 이미지를 위한 이미지드로 객체 생성
draw_bg.rectangle(xy=(0, 0, bg_width, bg_height), fill=(0, 0, 0, 200))
img_final = Image.alpha_composite(img_raw.convert("RGBA"), img_bg) # 이미지 합성
draw_final = ImageDraw.Draw(img_final) # 최종 이미지를 위한 이미지드로 객체 생성
draw_final.text(xy=(pad, pad), text=text, fill=(255, 255, 255), font=font)
img_final.convert("RGB").save(OUT_DIR / f"{Path(__file__).stem}.jpg")
img_final.show()
그다음 콜라주도 만들어보기