假设我想用白色像素覆盖文件“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
- 将 PNG 图像转换为 PNM 格式
- 图像尺寸存储在 PNM 图像的第二行中。使用 打印高度的一半(第二个字段 $2 / 2)作为整数
awk
并将该值保存在变量中halfheight
。 - 从顶部切掉一半高度,用相同数量的像素填充结果并带有顶部白色边框,然后将输出转换回 PNG 格式。
- 清理临时文件。
如果你想以更“害羞”的方式计算高度,你可以将图像尺寸保存在数组中,然后计算值:
dim=($(head -n2 image.pnm | tail -n1))
halfheight=$((${dim[1]} / 2))
链接:
- Netpbm 文档
- Netpbm程序目录(所有程序列表)
答案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
我人为地添加了一个黑色边框,这样你就可以看到白色背景上的范围。