[혼만파] 2주차 - 이미지 콜라주

gunny·2025년 7월 11일
0

혼만파

목록 보기
2/2

혼공학습단 14기 2주차

혼자 만들면서 공부하는 파이썬
2025.07.07 ~ 2025.07.13

Introduction

  • python에서 이미지 처리 패키지인 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()

그다음 콜라주도 만들어보기

profile
꿈꾸는 것도 개발처럼 깊게

0개의 댓글