我设计了一张包含连续票号(001,002,003...500)的票,现在我必须将每个票号导出为单独的 PNG 图像。
这需要大量的手动工作,我想问是否有插件或脚本可以用来自动完成此操作 - 我可以让文本层逐步更改,然后导出图像。
编辑
这是我的票。
票号在左侧角落 - 2014/001 -> 2014/500
图像大小:2858px x 1000px
票号字体为尘埃2:灵魂追踪者
答案1
我认为我让它工作了。
程序是,你把背景图片(名为“background.png”,没有票号,但和 2014/
) 放在一个文件夹中,并附上下面的脚本。然后,如果您运行该脚本(在编辑 head 部分的三行之后):
该脚本会生成从
001
到的数字500
(但可以是您在 head 部分定义的任何数字)随后,使用imagemagick
:脚本会按数字逐个创建单独的图层(文件),并将数字放在正确的位置
- 它将背景层 + 数字层复制到新文件中,并为每个数字保存在同一个文件夹中。
- 然后脚本会删除(临时的)附加层
笔记
您可能需要安装
imagemagick
:sudo apt-get install imagemagick
我用了这个免费版本字体。事实证明,在脚本中,我必须设置字体的绝对路径才能使其工作。我只是将其复制到
~/.fonts
并使用了该路径。在脚本的头部部分,设置你的。
剧本:
#!/usr/bin/env python3
import subprocess
import os
curr_path = os.path.dirname(os.path.abspath(__file__))
#---
number_of_tickets = 5
bg_file = curr_path+"/"+"background.png"
font = '/home/jacob/.fonts/dirt2 soulstalker.otf'
#---
def command(string, layer, position):
return "convert -size 2858x1000 xc:None -fill black -font "+'"'+font+'"'+\
" -stroke None -fill white -pointsize 123 -style Normal -gravity west -draw "+\
position+"'"+string+"'"+'" '+layer
def print_tofile(string, number):
print("creating file "+number+"."*3)
layer_1 = curr_path+"/"+number+"_a.png"
layer_2 = curr_path+"/"+number+"_b.png"
cmd_1 = command(string, layer_1, '"text 497,-420 ')
cmd_2 = command(string, layer_2, '"text 1035,-420 ')
subprocess.call(["/bin/bash", "-c", cmd_1])
subprocess.call(["/bin/bash", "-c", cmd_2])
cmd_3 = "convert "+bg_file+" "+layer_1+" "+layer_2+\
" -background None -layers merge "+curr_path+"/"+number+"_ticket.png"
subprocess.call(["/bin/bash", "-c", cmd_3])
os.remove(layer_1)
os.remove(layer_2)
print("done")
ns = [str(n) for n in range(number_of_tickets+1)][1:]
for item in ns:
number = str(int(3-len(item))*"0")+item
string = number
print_tofile(string, number)
如何使用
将其复制到一个空文件中,在脚本的头部部分设置:
- 票数
- 字体的(绝对)路径
- 背景图片的名称(无号码的票)如果您想要更改它
并将其保存为numbering.py
,与背景图像(2858px x 1000px)一起放在background.png
同一个文件夹中。
通过命令运行:
python3 /path/to/script.py