「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番目のフィールド$ 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バージョン
次に、次のようにします。
- 上、下の2つの部分に分かれています。
- 上部は捨てて下部を残してください。
- 下部を複製し、白で100%塗りつぶしてください
- 白い半分を下半分の前に置きます。
- 白の下に元の下半分を追加します。
magick image.png -crop x2@ -delete 0 \( +clone -fill white -colorize 100% \) +swap -append result.png
白い背景の範囲を見るために人工的に黒い枠を追加しました。