I want to skew an image into a trapezoidal shape. The left and right edges need to be straight up and down; the top and left edges need to be angular. I have no idea what the best way to do this is.
I’m using GD Library and PHP. Can anyone point me in the right direction?
Thanks, Jason
Advertisement
Answer
Try this:
<? // 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); ?>