Imagemagick을 사용하여 텍스트 아이콘 만들기
here 과 동일한 원칙에 따라 아래 스크립트는 Imagemagick의 도움으로 텍스트 파일에서 텍스트 아이콘을 만듭니다.
둥근 배경 이미지의 색상과 텍스트 색상은 스크립트 헤드 (및 기타 여러 속성)에서 설정할 수 있습니다.
그것은 무엇을
그것의 TEXTFILE를 읽고 (에 세트를 일 처음 네 줄 소요 n_lines = 4
(의 집합을) 처음 7 문자를 n_chars = 10
각 줄의), 그리고 예에서 설정 한 크기의 이미지 위에 오버레이를 생성합니다 psize = "100x100"
.
사용하는 방법
스크립트 imagemagick
를 설치 해야 합니다 :
sudo apt-get install imagemagick
그때:
- 스크립트를 빈 파일로 복사
- 다른 이름으로 저장
create_texticon.py
헤드 섹션에서 설정 :
- 아이콘의 배경색
- 아이콘의 텍스트 레이어의 색
- 생성 된 아이콘의 크기
- 아이콘에 표시 할 줄 수
- 아이콘에 표시 할 줄당 (첫 번째) 문자 수
- 이미지를 저장할 경로
텍스트 파일을 인수로 사용하여 실행하십시오.
python3 /path/to/create_texticon.py </path/to/textfile.txt>
스크립트
#!/usr/bin/env python3
import subprocess
import sys
import os
import math
temp_dir = os.environ["HOME"]+"/"+".temp_iconlayers"
if not os.path.exists(temp_dir):
os.mkdir(temp_dir)
# ---
bg_color = "#DCDCDC" # bg color
text_color = "black" # text color
psize = [64, 64] # icon size
n_lines = 4 # number of lines to show
n_chars = 9 # number of (first) characters per line
output_file = "/path/to/output/icon.png" # output path here (path + file name)
#---
temp_bg = temp_dir+"/"+"bg.png"; temp_txlayer = temp_dir+"/"+"tx.png"
picsize = ("x").join([str(n) for n in psize]); txsize = ("x").join([str(n-8) for n in psize])
def create_bg():
work_size = (",").join([str(n-1) for n in psize])
r = str(round(psize[0]/10)); rounded = (",").join([r,r])
command = "convert -size "+picsize+' xc:none -draw "fill '+bg_color+\
' roundrectangle 0,0,'+work_size+","+rounded+'" '+temp_bg
subprocess.call(["/bin/bash", "-c", command])
def read_text():
with open(sys.argv[1]) as src:
lines = [l.strip() for l in src.readlines()]
return ("\n").join([l[:n_chars] for l in lines[:n_lines]])
def create_txlayer():
subprocess.call(["/bin/bash", "-c", "convert -background none -fill "+text_color+\
" -border 4 -bordercolor none -size "+txsize+" caption:"+'"'+read_text()+'" '+temp_txlayer])
def combine_layers():
create_txlayer(); create_bg()
command = "convert "+temp_bg+" "+temp_txlayer+" -background None -layers merge "+output_file
subprocess.call(["/bin/bash", "-c", command])
combine_layers