前回の投稿で、星像チェックプログラムを投稿しましたが、四隅だけでなく、上下左右も切り出して合成できるように、あとついでにプログラムの構造も変更して読みやすくしました。
元画像がこちら
そして、処理実行後の生成画像がこちら
四隅だけより、8か所切り出されているほうがいい感じになりましたw
環境セットアップ
当方はWindows環境で環境を整備しました。 WSL2+Ubuntuをインストールします。※インストール方法はネットを参照のこと。小生はPowerShellで以下の通りインストールしました。
wsl --install wsl --install ubuntu
ubuntuのインストールの最後にユーザ名とパスワードを入力しますので、ここは忘れないように。
あとで、sudo apt
する際に必要になりますので。
次に、ubuntuに必要なパッケージをインストールします。
sudo apt update
sudo apt upgrade
sudo apt -y install imagemagick bc
こちらで事前準備は完了です。
ソースコード
以下のソースを、「crop_corners.sh」とかいう名前にして保存します。
実行方法は以下の通りです。
# crop_corners.sh [対象の画像ファイルのパス] [クロップサイズ(オプション)] # ファイル名だけ指定する場合 crop_corners.sh IMAGE001.jpg # クロップサイズも指定する場合 crop_corners.sh IMAGE001.jpg 500
以下、ソースコードになります。※2023/5/15若干修正
#! /bin/bash # エラーが発生したら終了させる set -e # 入力値チェック if [ "$1" = "" ] then echo "error:引数にファイル名を指定してくだされ" exit fi if [ ! -f "$1" ] then echo "ファイルが存在しません。$1" exit fi #dirpath=$(dirname $1) #filename=$(basename $1) filename=$1 width=$(identify -format %w ${filename}) height=$(identify -format %h ${filename}) if [ "$2" = "" ] then size=250 #elif [ $2 -ge `expr ${width} \/ 3` ] || [ $2 -ge `expr ${height} \/ 3` ] elif [ $2 -ge $(echo "${width} / 3" | bc) ] || [ $2 -ge $(echo "${height} / 3"| bc) ] then echo "error:切り抜きサイズがでかすぎ" exit else size=$2 fi # メインロジック echo "picture size: ${width} x ${height}" echo "- ${size}x${size} pixels wiil be cropped" ### 上部の画像切り出し # Top left y=0 x=0 convert ${filename} -crop ${size}x${size}+${x}+${y} ${filename}_tl.jpg # top left # Top middle x=$(echo "${width} / 2 - ${size} / 2" | bc) convert ${filename} -crop ${size}x${size}+${x}+${y} ${filename}_tm.jpg # top middle # Top right x=$(echo "${width} - ${size}" |bc ) convert ${filename} -crop ${size}x${size}+${x}+${y} ${filename}_tr.jpg # top right ### 高さ中間部画像の切り出し # Middle left y=$(echo "${height} / 2 - ${size} / 2" | bc) x=0 convert ${filename} -crop ${size}x${size}+${x}+${y} ${filename}_ml.jpg # middle left # Middle right x=$(echo "${width} - ${size}" |bc ) convert ${filename} -crop ${size}x${size}+${x}+${y} ${filename}_mr.jpg # middle right ### 下部の画像切り出し # bottom left y=$(echo "${height} - ${size}" | bc) x=0 convert ${filename} -crop ${size}x${size}+${x}+${y} ${filename}_bl.jpg # bottom left # bottom middle x=$(echo "${width} / 2 - ${size} / 2" | bc) convert ${filename} -crop ${size}x${size}+${x}+${y} ${filename}_bm.jpg # bottom middle # bottom right x=$(echo "${width} - ${size}" |bc ) convert ${filename} -crop ${size}x${size}+${x}+${y} ${filename}_br.jpg # bottom right # ボーダーを灰色で着色 convert "${filename}_tl.jpg" -bordercolor gray -border 3x3 "${filename}_tl.jpg" convert "${filename}_tm.jpg" -bordercolor gray -border 3x3 "${filename}_tm.jpg" convert "${filename}_tr.jpg" -bordercolor gray -border 3x3 "${filename}_tr.jpg" convert "${filename}_ml.jpg" -bordercolor gray -border 3x3 "${filename}_ml.jpg" convert "${filename}_mr.jpg" -bordercolor gray -border 3x3 "${filename}_mr.jpg" convert "${filename}_bl.jpg" -bordercolor gray -border 3x3 "${filename}_bl.jpg" convert "${filename}_bm.jpg" -bordercolor gray -border 3x3 "${filename}_bm.jpg" convert "${filename}_br.jpg" -bordercolor gray -border 3x3 "${filename}_br.jpg" # 中心画像の切り出し x=$(echo "scale=2; ${width} / 2 - 1.5 * ${size}" | bc) y=$(echo "scale=2; ${height} / 2 - 1.5 * ${size}" | bc) cropsize=$( echo "3 * ${size}" | bc) convert ${filename} -crop ${cropsize}x${cropsize}+${x}+${y} ${filename}_cen.jpg # 個別に切り出した画像を1枚に合成 # 合成後の境界のがたがたを解消するため、中間から合成し、四隅を最後に合成 composite -gravity north -compose over ${filename}_tm.jpg ${filename}_cen.jpg st1.jpg composite -gravity west -compose over ${filename}_ml.jpg st1.jpg st2.jpg composite -gravity east -compose over ${filename}_mr.jpg st2.jpg st3.jpg composite -gravity south -compose over ${filename}_bm.jpg st3.jpg st4.jpg composite -gravity northwest -compose over ${filename}_tl.jpg st4.jpg st5.jpg composite -gravity northeast -compose over ${filename}_tr.jpg st5.jpg st6.jpg composite -gravity southwest -compose over ${filename}_bl.jpg st6.jpg st7.jpg composite -gravity southeast -compose over ${filename}_br.jpg st7.jpg ${filename}_crop.jpg # ごみ処理 rm ${filename}_[tmb]*.jpg rm st[1-7].jpg rm ${filename}_cen.jpg
参考にしたサイトはこちら