본문 바로가기
Program/Language

[Python] PIL 이미지 Text 생성 가운데 정렬

by 소중하루 2021. 7. 18.
반응형

[Python] PIL 이미지 Text 생성 가운데 정렬

Python PIL 이미지 Text 생성 가운데 정렬
Python PIL 이미지 Text 생성

 

 

Python 에서 PIL을 사용하여 이미지를 생성하고 Text를 가운데 정렬하여 추가하는 소스 입니다.

 

티몬 몬소리체를 사용하였습니다.

사용할 폰트위치를 지정하여 사용할 수 있습니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# -*- coding: utf-8 -*-
from PIL import Image, ImageDraw, ImageFont
import textwrap
 
 
# IMAGE 기본 설정
var_max_w = 500
var_max_h = 500
var_anchor = "mm"  # middle, middle
var_font = ImageFont.truetype("TmonMonsori.ttf"80)
var_font_color = "#FFFFFF"
var_back_color = "#2F5597"
var_stroke_width = 0
var_stroke_color = "#FFFFFF"
 
# 이미지 생성
var_img = Image.new(mode="RGB", size=(var_max_w, var_max_h), color=var_back_color)
var_draw = ImageDraw.Draw(var_img)
#var_draw.line(((0, 250), (500, 250)), "gray")
#var_draw.line(((250, 0), (250, 500)), "gray")
 
# TITLE 기본 설정
var_title = "Python PIL 이미지 Text 생성"
var_title_width_length = 7  # 한 라인의 Max 글자 수
var_pad = 10  # 글 간격
 
var_title_wrap = textwrap.wrap(var_title, width=var_title_width_length)
var_len_line = len(var_title_wrap)
var_x_point = var_max_w / 2  # 글자를 출력할 x 축 Point : 가운데 정렬이므로 나누기 2 함
var_y_point = var_max_h / 2  # 글자를 출력할 y 축 Point : 가운데 정렬로 아래에서 계산 함
 
#print("라인 수 : "+str(var_len_line))
 
 
# 글자 사이즈
#var_textsize_w, var_textsize_h = var_draw.textsize(var_title_wrap[0], font=var_font)
var_textsize_h = var_draw.textsize(var_title_wrap[0], font=var_font)[1]
 
 
# 글자 기준 y Point 계산
var_y_point = var_y_point - (((var_textsize_h * var_len_line) + (var_pad * (var_len_line - 1))) / 2+ (var_textsize_h / 2)
#print("var_textsize_h : "+str(var_textsize_h))
 
 
# 라인별로 글자 출력
for var_line in var_title_wrap:
    #print("var_y_point : "+str(var_y_point))
 
    # 이미지에 텍스트 출력
    var_draw.text((var_x_point, var_y_point)
                , var_line
                , var_font_color
                , anchor=var_anchor
                , font=var_font
                , stroke_width=var_stroke_width
                , stroke_fill=var_stroke_color)
    
    # 글자 height 추가
    var_y_point = var_y_point + var_textsize_h + var_pad
 
 
# 이미지 저장
var_img.save("new.png")
# 이미지 보이기
var_img.show()
cs

 

 

반응형

댓글