2016-11-14 68 views
0

php函數imagecropauto()可以自動裁剪圖像。如何獲得autocrops偏移量和大小?

我想它會做一些計算,並將偏移量和大小作爲參數發送到imagecrop()函數。

我可以從返回的圖像中得到的尺寸值,但有一些方法可以獲得偏移值嗎?

回答

0

這是一個醜陋的解決方案,通過交換botom右角的顏色。
有沒有更簡單的方法?

function autocrop_range($image) 
{ 
    $org_size = array(imagesx($image), imagesy($image)); 
    $croped = imagecropauto($image, IMG_CROP_SIDES); 
    if(!$croped) 
    { 
     return FALSE; 
    } 
    $croped_size = array(imagesx($croped), imagesy($croped)); 
    if($org_size == $croped_size) 
    { 
     return FALSE; 
    } 
    imagedestroy($croped); 
    $copy = imagecrop($image, array('x' => 0, 'y' => 0, 'width' => $org_size[0], 'height' => $org_size[1])); 
    $corner_color = imagecolorat($copy, $org_size[0] - 1, $org_size[1] - 1); 
    $r = ($corner_color >> 16) & 0xFF; 
    $g = ($corner_color >> 8) & 0xFF; 
    $b = ($corner_color) & 0xFF; 
    $other_color = imagecolorallocate($copy, $r^0x80, $r^0x80, $r^0x80); 
    imagesetpixel($copy, $org_size[0] - 1, $org_size[1] - 1, $other_color); // force botom to stay uncroped 
    imagesetpixel($copy, $org_size[0] - 1, $org_size[1] - 2, $other_color); // force right to stay uncroped 
    $corner_croped = imagecropauto($copy, IMG_CROP_SIDES); 
    imagedestroy($copy); 
    $corner_croped_size = array(imagesx($corner_croped), imagesy($corner_croped)); 
    imagedestroy($corner_croped); 

    return array('x' => ($org_size[0] - $corner_croped_size[0]), 'y' => ($org_size[1] - $corner_croped_size[1]), 'width' => $croped_size[0], 'height' => $croped_size[1]); 
} 
+0

怎麼我結束了'$ croped_size [0]> $ corner_croped_size [0]'和'$ croped_size [1]> $ corner_croped_size [1]'?圖像:(http://www.pcper.com/files/imagecache/article_max_width/review/2012-11-10/85_PCPerSilverPNG-300.png) –

相關問題