ImageMagick:画像の周りにパディングをつけてセンタリングする
シェルを叩く場合
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で画像をセンタリングできなかったので、上記方法を採用しました。