2009-10-30 27 views
4

我想將圖像傾斜成梯形。左右邊緣需要上下筆直;頂部和左邊緣需要成角度。我不知道做到這一點的最佳方法是什麼。我會如何使用GD庫歪曲圖像?

我正在使用GD庫和PHP。任何人都可以將我指向正確的方向嗎?

感謝, 傑森

回答

5

試試這個:

<? 
// Set it up 
$img_name = "grid.jpg"; 
$src_img = imagecreatefromjpeg($img_name); 
$magnify = 4; 

// Magnify the size 
$w = imagesx($src_img); 
$h = imagesy($src_img); 
$dst_img = imagecreatetruecolor($w * $magnify, $h * $magnify); 
imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $w * $magnify, $h * $magnify, $w, $h); 
$src_img = $dst_img; 

// Skew it 
$w *= $magnify; 
$h *= $magnify; 
$new_lh = abs($h * 0.66); 
$new_rh = $h ; 
$step = abs((($new_rh - $new_lh)/2)/$w); 
$from_top = ($new_rh - $new_lh)/2 ; 
$dst_img = imagecreatetruecolor($w, $new_rh); 
$bg_colour = imagecolorallocate($dst_img, 255, 255, 255); 
imagefill($dst_img, 0, 0, $bg_colour); 
for ($i = 0 ; $i < $w ; $i ++) 
{ 
    imagecopyresampled($dst_img, $src_img, $i, $from_top - $step * $i, $i, 0, 1, $new_lh + $step * $i * 2, 1, $h); 
} 

// Reduce the size to "anti-alias" it 
$src_img = $dst_img; 
$dst_img = imagecreatetruecolor($w/$magnify * 0.85, $new_rh/$magnify); 
imagecopyresampled ($dst_img, $src_img, 0, 0, 0, 0, $w/$magnify * 0.85, $h/$magnify, $w, $h); 

header("Content-Type: image/jpg"); 
imagejpeg($dst_img); 
?> 
+0

感謝您的解決方案。你有另一面嗎? – lilsizzo 2013-07-03 05:09:16

2

我發現這個thread(翻譯荷蘭語 - >英語)談論同樣的事情。看起來這可能是你以後的事情。我認爲很明顯,如果不編寫自己的函數,就不能用GD來歪曲。如果您有ImageMagick,您可能會發現這是easier to achieve

祝你好運。

+0

是的,ImageMagick的就是來到了我的腦海裏,它可以做任何東西。 – Don 2009-11-09 04:39:52