1. 이미지에 텍스트 추가하기
Pillow에서 이미지에 텍스트를 추가하려면 ImageDraw 모듈을 사용해. 이 모듈은 text() 메서드를 제공하며, 지정된 좌표에 텍스트를 보여줄 수 있어.
간단한 텍스트 추가
from PIL import ImageDraw, ImageFont
# 그리기 객체 생성
draw = ImageDraw.Draw(image)
# 이미지에 텍스트 추가
text = "텍스트 예제"
draw.text((50, 50), text, fill="white")
# 텍스트가 추가된 이미지 저장
image.save("text_example.jpg")
이 예제에서는 "텍스트 예제"라는 텍스트가 (50, 50) 좌표에 추가돼. fill 파라미터는 텍스트의 색을 지정하며, 문자열("white", "black") 또는 RGB 형식((255, 255, 255))으로 색을 지정할 수 있어.
텍스트 폰트 설정
기본적으로 Pillow는 기본 폰트를 사용해. 다른 폰트를 선택하고 폰트 크기를 설정하려면 ImageFont.truetype()을 사용해. 폰트 파일이 시스템에 있어야 해.
# 폰트 로드
font = ImageFont.truetype("arial.ttf", 36)
# 사용자 지정 폰트를 사용하는 텍스트 추가
draw.text((50, 100), text, font=font, fill="yellow")
image.save("text_custom_font_example.jpg")
여기서는 arial.ttf 폰트에 36 픽셀 크기를 사용했어. 필요한 폰트가 없다면 다운로드 후 파일 경로를 지정하면 돼.
2. 워터마크 추가하기
워터마크는 반투명 텍스트나 이미지로, 사진에 덧씌워져서 복사를 방지하는 데 사용돼. 로고나 저작자 정보를 추가할 때 유용해. Pillow에서는 간단한 텍스트 워터마크를 만들 수 있어.
텍스트 워터마크
# 그리기 객체 생성
draw = ImageDraw.Draw(image)
# 워터마크 텍스트와 폰트
watermark_text = "© 2023 My Company"
font = ImageFont.truetype("arial.ttf", 24)
# 워터마크 위치 설정
width, height = image.size
text_width, text_height = draw.textsize(watermark_text, font=font)
x = width - text_width - 10
y = height - text_height - 10
# 오른쪽 아래에 워터마크 추가
draw.text((x, y), watermark_text, font=font, fill=(255, 255, 255, 128))
image.save("watermarked_example.jpg")
이 예제에서는 텍스트 워터마크가 이미지의 오른쪽 아래에 추가돼. 워터마크가 이미지 경계에서 약간 떨어지도록 x와 y를 계산했어.
3. 그래픽 요소 추가하기
Pillow는 텍스트 외에도 선, 사각형, 원, 타원 같은 기본 그래픽 요소를 그릴 수 있어. 이 기능은 테두리 생성, 영역 강조 표시, 도형 추가 등에 유용해.
선 그리기
선을 그리려면 line() 메서드를 사용해. 이 메서드는 선의 시작과 끝 좌표를 받아.
# 왼쪽 위에서 오른쪽 아래로 선 그리기
draw.line((0, 0, width, height), fill="red", width=5)
image.save("line_example.jpg")
이 코드는 왼쪽 위에서 오른쪽 아래로 대각선으로 지나가는 빨간색 선을 그려.
사각형 그리기
사각형은 rectangle() 메서드를 사용해 그릴 수 있어. 이 메서드는 사각형의 왼쪽 상단과 오른쪽 하단의 좌표를 받아.
# 사각형 그리기
draw.rectangle((50, 50, 200, 200), outline="blue", width=3)
image.save("rectangle_example.jpg")
여기서는 파란색 윤곽선과 두께가 3픽셀인 사각형을 만들었어. fill 파라미터를 사용해서 사각형을 색으로 채울 수도 있어.
원과 타원 그리기
ellipse() 메서드는 원과 타원을 그리도록 도와줘. 같은 폭과 높이를 지정하면 원이 그려져.
# 원 그리기
draw.ellipse((150, 150, 250, 250), outline="green", width=4)
image.save("circle_example.jpg")
이 예제에서는 좌표가 (200, 200)인 중심을 기준으로 원이 만들어져. 폭과 높이가 다르면 타원이 그려질 거야.
다각형 그리기
다각형을 그리려면 polygon() 메서드를 사용해. 이 메서드는 도형의 꼭짓점 좌표를 받아.
# 삼각형 그리기
draw.polygon([(100, 100), (150, 50), (200, 100)], outline="purple", fill="orange")
image.save("polygon_example.jpg")
이 코드는 오렌지색 채우기와 보라색 윤곽선으로 삼각형을 그려. 꼭짓점의 좌표를 지정해 어떤 형태의 도형이든 만들 수 있어.
4. 예제들
텍스트와 그래픽이 포함된 컴포지션 예제
위에서 배운 모든 걸 합쳐서 텍스트, 워터마크, 그래픽 요소가 포함된 이미지를 만들어보자.
from PIL import Image, ImageDraw, ImageFont
# 이미지 로드
image = Image.open("example.jpg")
draw = ImageDraw.Draw(image)
# 텍스트 추가
font = ImageFont.truetype("arial.ttf", 36)
draw.text((50, 50), "데모 텍스트", font=font, fill="yellow")
# 오른쪽 아래에 워터마크 추가
watermark_text = "© 2023 My Company"
font_watermark = ImageFont.truetype("arial.ttf", 24)
width, height = image.size
text_width, text_height = draw.textsize(watermark_text, font=font_watermark)
x = width - text_width - 10
y = height - text_height - 10
draw.text((x, y), watermark_text, font=font_watermark, fill=(255, 255, 255, 128))
# 선, 사각형, 원 그리기
draw.line((0, 0, width, height), fill="red", width=5)
draw.rectangle((50, 50, 200, 200), outline="blue", width=3)
draw.ellipse((150, 150, 250, 250), outline="green", width=4)
# 결과 저장
image.save("final_composition_example.jpg")
이 예제는 텍스트, 워터마크, 여러 그래픽 요소(선, 사각형, 원)가 포함된 이미지를 만들어. 이런 컴포지션은 발표 자료, 블로그, 프로페셔널 이미지 제작에 활용할 수 있어.
실무 활용 예시
- 이미지 마크 및 보호: 워터마크는 이미지의 무단 사용을 방지하고 텍스트로 저작자 정보나 회사 정보를 추가할 수 있어.
- 소셜 미디어용 이미지 준비: 텍스트와 그래픽을 추가하여 게시물에 추가 정보를 제공하거나 스타일을 더할 수 있어.
- 인포그래픽 및 데이터 시각화: 선과 도형 같은 그래픽 요소를 사용하여 단순한 그래프나 다이어그램을 만들 수 있어서 Pillow는 인포그래픽 제작에 아주 유용해.
GO TO FULL VERSION