使用 imagemagick Convert 将文本文件的每一行转换为单独的图像

使用 imagemagick Convert 将文本文件的每一行转换为单独的图像

我想获取一个大约 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"

当您的代码实际执行时,真是令人兴奋!

相关内容