Sử dụng Imagemagick để tạo biểu tượng văn bản
Dựa trên nguyên tắc tương tự như ở đây , tập lệnh bên dưới tạo biểu tượng văn bản từ tệp văn bản với sự trợ giúp của Imagemagick.
Màu của hình nền tròn và màu văn bản có thể được đặt trong phần đầu của tập lệnh (cũng như một số thuộc tính khác).
Những gì nó làm
Nó đọc tệp văn bản, lấy bốn dòng đầu tiên (được đặt trong n_lines = 4
), bảy ký tự đầu tiên (được đặt trong n_chars = 10
) của mỗi dòng và tạo một lớp phủ trên một hình ảnh có kích thước, được đặt trong ví dụ psize = "100x100"
.
Cách sử dụng
Kịch bản cần imagemagick
được cài đặt:
sudo apt-get install imagemagick
Sau đó:
- Sao chép tập lệnh vào một tập tin trống
- Lưu nó dưới dạng
create_texticon.py
thiết lập trong phần đầu:
- màu nền của biểu tượng
- màu sắc của trình duyệt văn bản của biểu tượng
- Kích thước của biểu tượng đã tạo
- Số lượng dòng để hiển thị trong biểu tượng
- Số lượng ký tự (đầu tiên) trên mỗi dòng sẽ hiển thị trong biểu tượng
- Đường dẫn lưu ảnh
Chạy nó với textfile của bạn như là một đối số:
python3 /path/to/create_texticon.py </path/to/textfile.txt>
Kịch bản
#!/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