이번 포스트에서는 파이썬과 PILLOW 라이브러리를 이용하여, 백그라운드 이미지에 글자 추가하여 저장하는 프로그램을 담아볼 예정이다.
예전에 로또 당첨 정보를 이미지화하여 출력하는 프로그램을 작성한 적이 있었는데, 이번에는 내 블로그의 BOJ 위키 포스트에 대표 이미지를 문제 번호를 포함하여 출력하여 사용하려고 작성한다.
전체적인 흐름은 1) 백그라운드 이미지 읽기, 2) 이미지에 포함될 글자 생성, 3) 글자 위치 지정, 4) 백그라운드 이미지 + 글자를 파일로 저장하는 과정을 거친다.
이를 위해서는 PIL 라이브러리가 필요하다. 해당 라이브러리는 아래의 명령을 통하여 설치할 수 있다.
sudo apt-get install pillow
정상적으로 Pillow 라이브러리를 설치하였다면, 아래의 코드를 Python2에서 실행해보자. 실행에 앞서 이미지 위치나 패스는 직접 설정하자.
# _*_ coding: utf-8 _*_
import sys
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
im=Image.open("BOJ WIKI.png")
pixelMap = im.load()
newimg = Image.new( im.mode, im.size)
pixelsNew = newimg.load()
for i in range(newimg.size[0]):
for j in range(newimg.size[1]):
pixelsNew[i,j] = pixelMap[i,j]
font = ImageFont.truetype('font/NanumGothicBold.ttf', 100)
text = unicode("- "+sys.argv[1] + "번 풀이 -", 'utf-8', 'ignore')
size = font.getsize(text)[0]
ImageDraw.Draw(newimg).text(((newimg.size[0]-size)/2,500),text,(0,0,0),
font=font)
newimg.convert('RGB').save('result/boj-'+sys.argv[1]+'.jpg')
우선 첫라인의 주석문장은 utf-8으로 코딩되어 있음을 뜻한다. 즉 한글을 출력하기 위한 인코딩 정보를 포함하고 있다
두번째로 sys는 파이썬 프로그램 실행시 입력받은 문제 번호를 읽어오기 위해(sys.argv) 임포트되었다. 그리고 PILLOW 라이브러리에서 Image, ImageDraw, ImageFont를 가져온다.
이 과정이 끝나면 백그라운드 이미지로 사용할 사진을 읽어오고, 새로운 이미지를 생성하여 카피한다.
이제 이미지에 쓸 문구를 처리해야 하는데, 폰트 사이즈는 무조건 폰트 변수를 만들어야 변경이 된다. 따라서 나눔고딕 폰트를 받고 크기를 100으로 셋업한다음, 문구를 유니코드로 저장한다.
그 다음 문구를 중앙 정렬하기 위하여 사이즈를 측정하고 ImageDraw.Draw함수를 이용하여 이미지에 덮어쓴다. 이때 첫 매개 변수는 ((문구 시작 X, 문구 시작 Y), 문구, (R, G, B))로 구성되며, font도 함께 전달한다.
마지막으로 이미지를 RGB로 바꾸어 jpg 이미지로 저장한다.
'프로그래밍 > C, C++, Java, Python' 카테고리의 다른 글
[C/C++] Simple Polygon의 Triangulation - OpenGL (0) | 2019.04.10 |
---|---|
[C/C++] 간단하게 Visual Studio 2015에 C++ OpenGL 설치하기 (0) | 2019.04.10 |
[Python] Modbus CRC16 파이썬3 예제 코드 (0) | 2019.03.28 |
[C/C++] Simple Polygon의 Triangulation – OpenGL (0) | 2019.03.06 |
[VB] 윈도우에서 프로그램을 백그라운드로 실행하는 방법 (0) | 2019.03.06 |