我用gd庫旋轉圖像。 $_POST['rotation']
給出旋轉度。 $imagen
是getWidth()
,setWidth()
,getHeight()
,setHeight()
和setError()
方法的圖像實例:旋轉後獲取新圖像尺寸
//Get the new width and height
$x = floor(abs($imagen->getWidth() * cos(deg2rad($_POST['rotation'])))) + floor(abs($imagen->getHeight() * sin(deg2rad($_POST['rotation']))));
$y = floor(abs($imagen->getWidth() * sin(deg2rad($_POST['rotation'])))) + floor(abs($imagen->getHeight() * cos(deg2rad($_POST['rotation']))));
//Set the new width and height
$imagen->setHeight($y);
$imagen->setWidth($x);
//Rotate image
if(!$canvas = imagerotate ($canvas, $_POST['rotation'], 0)) $imagen->setError('Error rotating');
的問題是,有時$x
和$y
變量沒有正確的價值觀。 例如如果我旋轉100º,則獲得$x = 2364
,但畫布寬度爲2362.
我在做什麼錯了?
更新:
我試着floor
,反之亦然,以取代abs
,並得到怪異的結果:
echo 'abs(floor) = '. (abs(floor($imagen->getAncho() * cos(deg2rad($_POST['rotacion'])))) + abs(floor($imagen->getAlto() * sin(deg2rad($_POST['rotacion'])))));
echo 'floor(abs) = '.(floor(abs($imagen->getAncho() * cos(deg2rad($_POST['rotacion']))))+ floor(abs($imagen->getAlto() * sin(deg2rad($_POST['rotacion'])))));
結果:
abs(floor) = 2365 floor(abs) = 2364
我不我真的明白爲什麼abs()
會改變這個值。 無論如何,真實值比floor(abs)
值小2個像素。
問題恰恰相反。在這個例子中,我得到2364寬度,但圖像寬度爲2362。 – Manolo
我的不好,我讀錯了!讓我檢查 –
我不確定imagerotate本身使用了哪些計算方法,但我現在可以想象的唯一方法就是在將圖像的值設置爲絕對值之前對圖像進行輪轉(樓層),因此您可以嘗試交換樓板和絕對座標並測試如果它更好... –