2

画像をアップロードして300x200ピクセルにサイズ変更しています

私はimagick拡張機能、特にadaptiveResizeImage()関数を使用しています。

bestfitを使用してアップロードすると、画像の両側に多くの空白があります(縦向きまたは横向きによって異なります)。

私がしたいのは、領域全体(空白なし)を塗りつぶし、より長い長さ(高さまたは幅)をトリミングするようにサイズ変更することでした。つまり、空白よりも画像を失う方がいいです。

imagick拡張機能でこれを行う簡単な方法はありますか?

編集:私は必要なことを何とかできましたが、もっと良い方法が必要です

header('Content-type: image/jpeg');

// target sizes
$target_width = 300 ;
$target_height = 100 ;

// create new image
$image = new Imagick('test.jpg');

// get current size and calculate diffences from target sizes
$size = $image->getImageGeometry();
$size['width_diff'] = $target_width/$size['width'] ;
$size['height_diff'] = $target_height/$size['height'] ;

// resize by smallest size
if($size['width_diff']>=$size['height_diff'])
{
    $width = $target_width ;
    $height = $size['height']*$size['width_diff'] ;
}
else
{
    $width = $size['width']*$size['height_diff'] ;
    $height = $target_height ;
}

// get offsets
$x = ($width-$target_width)/2 ;
$y = ($height-$target_height)/2 ;

// resize and offset image
$image->adaptiveResizeImage($width, $height) ;
$image->extentImage($target_width, $target_height,-$x,-$y);

// output and clean up
echo $image ;
$image->clear();
$image->destroy();
4

1 に答える 1

2

ImageMagick チュートリアルのエクステントフラグを参照してください。

ざっと見てみると、同等の PHP は Imagick::ExtentImage のようですが、php からは使用していません。

于 2010-08-26T09:43:46.743 に答える