シェルを叩く場合
convert original.jpg -gravity center -background white -extent 1024x768 padded.jpg
なお、-gravity centerの場所をこのようにするとうまくいきません:
convert original.jpg -background white -extent 1024x768 -gravity center padded.jpg
なぜだろう…
PHPから行う場合
ここでは、最終的な画像サイズを1024x768にしてセンタリングするとします:
<?php $newWidth = 1024; $newHeight = 768; // 変換前の画像を読み込む $image = new Imagick('/tmp/original.jpg'); // サイズを取得 $width = $image->getImageWidth(); $height = $image->getImageHeight(); // 新しい画像の中にセンタリングする際の位置を計算 $x = (int) ($newWidth / 2) - (int) ($width / 2); $y = (int) ($newHeight / 2) - (int) ($height / 2); // 新しいjpg画像を作成 $canvas = new Imagick(); $canvas->newImage($newWidth, $newHeight, 'white', 'jpg'); // 新しい画像の上に元画像を合成 $canvas->compositeImage($image, imagick::COMPOSITE_OVER, $x, $y); // 画像を書き出す $canvas->writeImage("/tmp/new.jpg");
なお、setImageExtentも使えますがsetGravityで画像をセンタリングできなかったので、上記方法を採用しました。