如何使用 bash 脚本修改图像的内容?

如何使用 bash 脚本修改图像的内容?

假设我想用白色像素覆盖文件“image.png”的上半部分。我可以用 bash 脚本来做到这一点吗?

答案1

使用netpbm工具;它应该可以通过您的包管理器安装。

pngtopnm image.png > image.pnm
halfheight=$(awk 'NR==2 { printf "%d", $2/2 }' image.pnm)
pnmcut -top "$halfheight" image.pnm | pnmpad -white -top "$halfheight" | pnmtopng > out.png
rm image.pnm
  1. 将 PNG 图像转换为 PNM 格式
  2. 图像尺寸存储在 PNM 图像的第二行中。使用 打印高度的一半(第二个字段 $2 / 2)作为整数awk并将该值保存在变量中halfheight
  3. 从顶部切掉一半高度,用相同数量的像素填充结果并带有顶部白色边框,然后将输出转换回 PNG 格式。
  4. 清理临时文件。

如果你想以更“害羞”的方式计算高度,你可以将图像尺寸保存在数组中,然后计算值:

dim=($(head -n2 image.pnm | tail -n1))
halfheight=$((${dim[1]} / 2)) 

链接:

答案2

您可以使用 imagemagick 的绘图命令来完成此操作:

https://imagemagick.org/script/command-line-options.php#draw

例子:

w=$(identify -format %w input.png)
h=$(identify -format %h input.png)
convert -draw "rectangle 0,0 ${w},$((h/2))" -fill white input.png output.png

答案3

创建一个起始图像,其上半部分与底部易于区分:

magick -size 640x480 gradient:red-blue image.png

在此输入图像描述

较新的 ImageMagick 版本

magick image.png -region "x50%" -fill white -colorize 100% result.png

或者

magick image.png -region "640x%[fx:h/2]" -fill white -colorize 100% result.png

与下面的结果相同。

较旧的 ImageMagick 版本

现在,执行以下操作:

  • 分成两半,即顶部和底部
  • 丢弃顶部,保留底部
  • 克隆底部并用白色填充 100%
  • 将白色的一半放在下半部分之前
  • 将原始下半部分添加到白色下方

magick image.png -crop x2@ -delete 0 \( +clone -fill white -colorize 100% \) +swap -append result.png

我人为地添加了一个黑色边框,这样你就可以看到白色背景上的范围。

在此输入图像描述

相关内容