最小のキャンバスにすべてのコンテンツが収まるように画像のサイズを変更するには?

最小のキャンバスにすべてのコンテンツが収まるように画像のサイズを変更するには?

頑張る違いをすばやく確認する別の繰り返しの間にウェブサイト ImageMagickを使用してくださいcompareしかし、画像の比較を拒否します異なるサイズ、角に固定された無限キャンバスを単純にシミュレートするオプションはないようです。-subimage-searchこれは次の理由で私が望むものではありません。

  • どの画像が大きいのかわかりません。 (Aが最も大きく、Bが最も広い画像AとBをサポートしていないようです。)
  • 同じ角に画像を固定したいです。最も一致するものを検索するには、次のものが必要な場合があります。たくさん長くなり、より良い結果は得られません(この目的のために)。

現在の解決策はうまくいきますが、非効率的で気まぐれに感じられます。

max_width_1="$(identify -ping -format "%w" 1.png)"
max_width_2="$(identify -ping -format "%w" 2.png)"
max_width="$((max_width_1>max_width_2?max_width_1:max_width_2))"
max_height_1="$(identify -ping -format "%h" 1.png)"
max_height_2="$(identify -ping -format "%h" 2.png)"
max_height="$((max_height_1>max_height_2?max_height_1:max_height_2))"
convert -extent "${max_width}x${max_height}" -background transparent 1.png 1.png
convert -extent "${max_width}x${max_height}" -background transparent 2.png 2.png

答え1

変数の略語はコードの視覚的な明確さのためにのみ使用され、変更する必要はありません。実際より長い(メンテナンスに優しい)変数名。

identify機能コードは、4つの代わりに1つのインスタンスを使用し、read変数をロードするために使用し(xargsコード行を節約するために非効率性を使用する)、いくつかのbash注意事項を使用して削減できます。

read mw1 mh1 mw2 mh2 <<< $(identify -ping -format "%w %h " [12].png)
mw="$((mw1>mw2?mw1:mw2))"
mh="$((mh1>mh2?mh1:mh2))"
echo {1,1,2,2}.png | xargs -n 2 convert -extent "${mw}x${mh}" -background transparent 

あるいは、変数の代わりに配列を使用する方がよりきれいになる可能性があります。

read w[1] h[1] w[2] h[2] <<< $(identify -ping -format "%w %h " [12].png)
w[0]="$((w[1]>w[2]?w[1]:w[2]))"
h[0]="$((h[1]>h[2]?h[1]:h[2]))"
echo {1,1,2,2}.png | 
    xargs -n 2 convert -extent "${w[0]}x${h[0]}" -background transparent 

関連情報