web-dev-qa-db-ja.com

ImageMagick(GraphicsMagick)を使用してPNGのキャンバスサイズを変更するにはどうすればよいですか? (透明度を埋める方法は?)

または、正方形以外のPNGを取得し、画像の「残りの部分」を透明度で「塗りつぶして」、結果の正方形の画像の元の画像が正方形の中央に配置されるようにするにはどうすればよいですか?

ULTIMATELY、私が欲しいのは、GMがサポートする任意のサイズの任意の画像を撮影し、アスペクト比を維持し、非正方形の場合は透明度を埋めた、縮小されたPNG(たとえば、いずれかの次元で最大40ピクセル)を作成することです。元の画像、およびすでに準備された40x40PNG透明マスクが適用されています。

スケールダウンしてアスペクト比を維持する方法はすでに知っています。コンポジットを適用するためのコマンドはすでにあります。私の唯一の欠けている部分は、非正方形の画像を正方形化することです(透明度のあるパディング)。

単一のコマンドが望ましい。マルチコマンドチェーンを使用できます。

(編集)

追加情報:これが私が使用している複合コマンドです:

gm composite -compose copyopacity mask.png source-and-target.png source-and-target.png

ここで、mask.pngには、source-and-target.pngの保持したいものの白いピクセルと、source-and-target.pngの削除(および透明化)したいものの透明なピクセルがあります。

9
Pistos

このコマンドは、任意のサイズの入力ファイルを受け取り、それを40x40の正方形と透明度のあるパッドに最適に適合させます。

convert \
   original.png \
  -thumbnail '40x40>' \
  -background transparent \
  -gravity center \
  -extent 40x40 \
  -compose Copy_Opacity \
  -composite mask.png \
   original-resized.png

gravityオプションは、画像が両方向の中央に配置されるようにし、ピクセルがない場合はtransparentが使用されます。次に、mask.pngを使用して合成が行われます。

7
Paul

1つのフォルダーからすべてのPNGを変換する1つのコマンド:

mogrify \
 -resize 50x50 \
 -background transparent \
 -gravity center \
 -extent 50x50 \
 -format png \
 -path resized \
 *.png

mogrifyはImageMagickパッケージのコマンドです。最初に出力ディレクトリを作成する必要があります。

これが私が最終的に行ったものです。 2段階のプロセス:

gm convert \
  -thumbnail '40x40>' \
  -background transparent \
  -gravity center \
  -extent 40x40 \
   original.png \
   intermediate.png

gm composite \
  -compose in \
   intermediate.png \
   mask.png \
   out.png

ここで、mask.pngは、保持したいものの白いピクセルであり、マスクアウト(破棄)したいものの透明なピクセルです。

1
Pistos