2017-03-14 17 views
0
I Imagickが次のことをやろうとしている

の中央に画像や場所のサイズを変更し、私はそれを動作させることはできません。画像は390ピクセル以上高い場合、それはそれのサイズを変更した場合、はキャンバス

チェック〜390ピクセルの高さにしてください。

は、白いキャンバスの追加300ピクセル幅の広い高400ピクセルで、その後、その中央に画像を配置します。

私のコードは次のとおり

$im = new imagick("test.jpg"); 
$imageprops = $im->getImageGeometry(); 
$width = $imageprops['width']; 
$height = $imageprops['height']; 
if($height > '390'){ 
$newHeight = 390; 
$newWidth = (390/$height) * $width; 
}else{ 
$newWidth = $imageprops['width']; 
$newHeight = $imageprops['height']; 
} 

$im->resizeImage($newWidth,$newHeight, imagick::FILTER_LANCZOS, 0.9, true); 

$canvas = new Imagick(); 
$canvas->newImage(300, 400, 'white', 'jpg'); 
$canvas->compositeImage($im, imagick::COMPOSITE_OVER, 100, 50); 

$canvas->writeImage("test-1.jpg"); 

画像が生成されるときに大規模なものは、何らかの理由で高い388個のピクセルにスケーリングされ、小さなものは、それらの元の寸法に任されます。合成画像に付加100,50と大きな画像では動作しないものの

キャンバス上に配置することは常に正しくありません。

画像のほとんどは、背が高くて細いですが、彼らは背が高いよりも幅が広く、そのいくつかがあります。

私は間違っていますか?

おかげで、

リック

+0

あなたはそれが簡単に白にCENTER、背景色に重力を設定し、300x400の白いキャンバスに自分のイメージを置くために、 'setImageExtentを()'を使用するかもしれません。 –

+0

'if($ height> 390)'引用符なし。 –

答えて

1

マークのコメントは良いオプションかもしれません。エクステントは重力を尊重し、最終的な画像が常に300x400になるようにします。 Imagick::compositeImageを使用して画像を中央に配置するには、オフセットを計算する必要があります。これは、対象の幅/高さが既にあるので簡単です。&キャンバス画像。

$canvas = new Imagick(); 
$finalWidth = 300; 
$finalHeight = 400; 
$canvas->newImage($finalWidth, $finalHeight, 'white', 'jpg'); 
$offsetX = (int)($finalWidth/2) - (int)($newWidth/2); 
$offsetY = (int)($finalHeight/2) - (int)($newHeight/2); 
$canvas->compositeImage($im, imagick::COMPOSITE_OVER, $offsetX, $offsetY);