2009-04-23 167 views
2

你好,Php Gd旋轉圖像

我想旋轉中心周圍的圓形圖像,然後切斷雙方。我看到imagerotate函數,但它似乎不圍繞中心旋轉。

任何人有任何建議嗎?

謝謝。

更新:由於它是一個圓形,我想切割邊緣並保持我的圓圈的尺寸相同。

+0

正如一個隨機的阿里納斯,PHP推出了一個更新剛剛能解決與GD imagerotate一個安全漏洞...只是認爲這是一個有趣的珍聞。 – KyleFarris 2009-04-23 13:41:33

回答

3

documentation說它確實圍繞中心旋轉。

不幸的是,它也表示它會縮放圖像,使其仍然適合。這意味着無論你做這個功能會改變你的內部圓形圖像的大小。

你可以(相對容易)計算出多少的縮減會發生,然後預分頻將圖像上適當提前。

如果你有PHP「ImageMagick的」功能available你可以用這些代替 - 他們顯然不縮放圖像。

+0

先調整大小然後*然後*旋轉應該產生更好的質量圖像。 – soulmerge 2009-04-23 10:10:26

0

根據PHP手冊imagerotate()頁:

旋轉中心是圖像的中心 ,並且旋轉後的圖像 縮小,使整個旋轉 圖像適合在目標圖像中 - 邊緣沒有被裁剪。

也許圖像的可見中心不是實際的中心?

4

我成功地面對這個問題用下面的代碼

$width_before = imagesx($img1); 
    $height_before = imagesy($img1); 
    $img1 = imagerotate($img1, $angle, $mycolor); 

    //but imagerotate scales, so we clip to the original size 

    $img2 = @imagecreatetruecolor($width_before, $height_before); 
    $new_width = imagesx($img1); // whese dimensions are 
    $new_height = imagesy($img1);// the scaled ones (by imagerotate) 
    imagecopyresampled(
     $img2, $img1, 
     0, 0, 
     ($new_width-$width_before)/2, 
     ($new_height-$height_before)/2, 
     $width_before, 
     $height_before, 
     $width_before, 
     $height_before 
    ); 
    $img1 = $img2; 
    // now img1 is center rotated and maintains original size 

希望它能幫助。

再見