2010-08-26 128 views
2

我上傳圖像並將其大小調整爲300x200像素使用php imagick調整大小

我使用的是imagick擴展,特別是adaptiveResizeImage()函數。

使用最佳擬合有很多在畫面的兩側空白的上傳時(取決於縱向或橫向)。

什麼,我寧願它做的是調整,以填補整個區域(無空格),並裁剪長度較長(高度或寬度),即我寧願失去比擁有一些空白圖像。

有一種簡單的方式與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(); 

回答

2

也許你可以看看在ImageMagick的教程extent標誌。

從簡單的看起來,它似乎相當於PHP將是Imagick :: ExtentImage ,但沒有使用它從PHP。

+0

這是一個很大的幫助,你知道如何使用的imagick擴展填充區域標誌(「^」標誌)? – mononym 2010-08-26 10:08:01

+0

對不起,沒有使用PHP擴展。但從快速的樣子他們確實有一個setOption http://www.php.net/manual/en/function.imagick-setoption.php – renick 2010-08-26 11:40:14