Menggunakan Imagemagick untuk membuat ikon teks
Berdasarkan prinsip yang sama seperti di sini , skrip di bawah ini membuat ikon teks dari file teks dengan bantuan Imagemagick.
Warna gambar latar belakang bulat dan warna teks dapat diatur di kepala skrip (serta sejumlah properti lainnya).
Apa yang dilakukannya
Ini membaca file teks, mengambil empat baris pertama (set in n_lines = 4
), tujuh karakter pertama (set in n_chars = 10
) dari setiap baris, dan membuat overlay gambar ukuran, diatur dalam mis psize = "100x100"
.
Cara Penggunaan
Skrip perlu imagemagick
diinstal:
sudo apt-get install imagemagick
Kemudian:
- Salin skrip ke file kosong
- Simpan sebagai
create_texticon.py
atur di bagian kepala:
- warna latar belakang ikon
- warna textlayer ikon
- Ukuran ikon yang dibuat
- Jumlah garis untuk ditampilkan di ikon
- Jumlah karakter (pertama) per baris untuk ditampilkan di ikon
- Jalur tempat menyimpan gambar
Jalankan dengan file teks Anda sebagai argumen:
python3 /path/to/create_texticon.py </path/to/textfile.txt>
Naskah
#!/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