生成txt文件通过merging的输出catimg
and figlet
而不是真实的merge,我将简单地将两个输出放在正确的位置ANSI 转义码 https://en.wikipedia.org/wiki/ANSI_escape_code
{
mapfile aa < <(figlet -w40 $text)
printf "%s" "${aa[@]}"
catimg -w40 "$image" |
sed "\$!s/^/\o33[40C/;1s/^/\o33[${#aa[@]}A/"
} >outputfile.txt
这可以写成一个函数:
mkTextImage() {
local aa width=${COLUMNS} prcent=50 text image lwidth rwidth ffont
while [ "${1::1}" == "-" ] ;do
case $1 in
-w) shift;width=$1;shift;;
-p) shift;prcent=$1;shift;;
-f) shift;ffont="-f $1";shift;;
esac
done
text="$1" image="$2"
printf -v lwidth %.0f $(
bc -l <<<"$width/100*$prcent")
rwidth=$((width-lwidth))
mapfile aa < <(figlet -w$lwidth $ffont $text)
printf "%s" "${aa[@]}"
catimg -w$rwidth "$image" |
sed "\$!s/^/\o33[${lwidth}C/;1s/^/\o33[${#aa[@]}A/"
}
并反转:
(注:这项工作同时catimg长度保持大于figlet length)
mkImageText () {
local aa fl width=${COLUMNS} prcent=50 text image lwidth rwidth ffont
while [ "${1::1}" == "-" ] ;do
case $1 in
-w) shift;width=$1;shift;;
-p) shift;prcent=$1;shift;;
-f) shift;ffont="-f $1";shift;;
esac
done
image="$1" text="$2"
printf -v lwidth %.0f $(bc -l <<<"$width/100*$prcent")
rwidth=$((width-lwidth))
mapfile aa < <(catimg -w$lwidth "$image")
printf "%s" "${aa[@]}"
printf "\e[$((${#aa[@]}-1))A"
mapfile fl < <(figlet -w$rwidth $ffont "$text")
printf "\e[${lwidth}C%s" "${fl[@]}"
printf "\e[$((${#aa[@]}-${#fl[@]}-1))B"
}
从那里,关于您的评论:尝试使用42%
of 80列宽对于图像:
mkImageText -f small -p 42 spongebob.png "Sponge Bob"
or
mkTextImage -f small -p 58 "Sponge Bob" spongebob.png
将渲染:
然后你可以尝试使用-f smblock
选项,或修改要使用的函数toilet
代替figlet
...
更完整的版本在我的网站上:mkImageText.sh https://f-hauri.ch/vrac/mkImageText.sh.txt