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番目のフィールド$ 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バージョン

次に、次のようにします。

  • 上、下の2つの部分に分かれています。
  • 上部は捨てて下部を残してください。
  • 下部を複製し、白で100%塗りつぶしてください
  • 白い半分を下半分の前に置きます。
  • 白の下に元の下半分を追加します。

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

白い背景の範囲を見るために人工的に黒い枠を追加しました。

ここに画像の説明を入力してください。

関連情報