![使用 imagemagick Convert 将文本文件的每一行转换为单独的图像](https://linux22.com/image/205651/%E4%BD%BF%E7%94%A8%20imagemagick%20Convert%20%E5%B0%86%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E7%9A%84%E6%AF%8F%E4%B8%80%E8%A1%8C%E8%BD%AC%E6%8D%A2%E4%B8%BA%E5%8D%95%E7%8B%AC%E7%9A%84%E5%9B%BE%E5%83%8F.png)
我想获取一个大约 1,000 行的文本文件,并使用可能的 ImageMagick 转换为文件中的每一行创建一个单独的 png 图像。图像应为 1920x1080,黑色背景和白色文本。我可以使用以下命令将列表(一次性)获取到图像上:
convert -size 1980x1020 xc:black -font Play-Regular.ttf -pointsize 85 -fill white -gravity center -draw "text 0,0 '$(cat list.txt)'" image.png
我还尝试创建一个 bash 文件来迭代每一行:
#!/bin/bash
File="list.txt"
Lines=$(cat $File)
for Line in $Lines
do
convert -size 1980x1020 xc:black -font Play-Regular.ttf -pointsize 85 -fill white -gravity center -draw "text 0,0 '$(cat Line)'" $line.png
done
我觉得我已经接近了,但我的 bash-fu 很弱,命令抛出了几个错误。
答案1
您首先需要将该行转换为convert
.这里使用 zsh 而不是 bash:
#! /bin/zsh -
file=list.txt
typeset -Z4 n=1 # line counter 0-padded to length 4.
set -o extendedglob
while IFS= read -ru3 line; do
# remove NUL characters if any:
line=${line//$'\0'}
# escape ' and \ characters with \:
escaped_line=${line//(#m)[\'\\]/\\$MATCH}
convert -size 1920x1080 \
xc:black \
-font Play-Regular.ttf \
-pointsize 85 \
-fill white \
-gravity center \
-draw "text 0,0 '$escaped_line'" line$n.png
(( n++ ))
done 3< $file
答案2
谢谢您的帮助!很棒的教程,一点点试验和错误,我的第一个真正的 BASH 正在运行并制作图像!这是有效的:
#!/bin/bash
file="list.txt"
while read -r line; do
convert -size 1980x1020 xc:black -font Play-Regular.ttf -pointsize 105 -fill white -gravity center -draw "text 0,0 '$line'" $line.png
done < "$file"
当您的代码实际执行时,真是令人兴奋!