2016-01-09 55 views
2

我有一系列的圖像在白色背景上。php imagemagick - 如何在沒有裁剪的白色方塊中間放置圖像

我的問題是他們是在各種形狀和大小,我希望他們都是相等的大小和所有以正方形比例爲中心沒有裁剪和丟失任何實際的形象。

下面是我迄今爲止最好的嘗試(使用imagemagik),但不結垢它只是在80×80裁剪廣場,失去大部分內容

$im = new Imagick("myimg.jpg"); 

    $im->trimImage(20000); 

    $im_props = $im->getImageGeometry(); 

    $width = $im_props['width']; 
    $height = $im_props['height']; 
    $diff = abs($width-$height); 

    $color=new ImagickPixel(); 
    $color->setColor("white"); 

    if($width > $height){ 
     $im->thumbnailImage(80, 0); 
     $im->borderImage($color, ($diff/2), 0); 
    }else{ 
     $im->thumbnailImage(0, 80); 
     $im->borderImage($color, 0, ($diff/2)); 
    } 

    $im->cropImage (80,80,0,0); 

    $im->writeImage("altimg.jpg"); 

任何幫助感激收到

+0

將'resize'設爲'80x80',然後用'gravity = center'將'extent'設置爲'80x80'。 –

+0

哦,並在設置'extent'之前將'background'設置爲'white'。 –

+0

感謝您的答案,但我需要在PHP中執行此操作,而不是命令行 – Finglish

回答

4

謝謝@Mark Setchel爲我指出了正確的方向。我設法達到了我想要的效果(以白色方塊爲中心並裁剪成最長邊的未裁剪圖像)。

我已經投票了你的意見,但認爲我會發布我的最終代碼的完整性。

$im = new Imagick("myimg.jpg"); 

    $im->trimImage(20000); 

    $im->resizeImage(80, 80,Imagick::FILTER_LANCZOS,1, TRUE); 
    $im->setImageBackgroundColor("white"); 

    $w = $im->getImageWidth(); 
    $h = $im->getImageHeight(); 

    $off_top=0; 
    $off_left=0; 

    if($w > $h){ 
     $off_top = ((80-$h)/2) * -1; 
    }else{ 
     $off_left = ((80-$w)/2) * -1; 
    } 

    $im->extentImage(80,80, $off_left, $off_top); 

    $im->writeImage("altimg.jpg"); 
+0

幹得好!並感謝您將代碼與社區分享。有一個投票! –