[英]How to crop image using GD image functions
everything in my code is working great for creating a thumbnail image of an uploaded picture. 我的代码中的所有内容都非常适合创建上传图片的缩略图。
now all i need to do is crop the $thumb from the center of the image into a square shape (50x50) 现在我要做的就是将图像中心的$ thumb裁剪为正方形(50x50)
heres my function so far 到目前为止我的功能
$ext = end(explode('.', $_FILES['profile_photo']['name']));
if ($ext == 'jpg' || $ext == 'jpeg' || $ext == 'png' || $ext == 'gif')
{
$tmp = $_FILES['profile_photo']['tmp_name'];
if ($ext=='jpg' || $ext=='jpeg')
$src = imagecreatefromjpeg($tmp);
else if ($ext=='png')
$src = imagecreatefrompng($tmp);
else
$src = imagecreatefromgif($tmp);
list($width,$height) = getimagesize($tmp);
$thumb_width = 50;
$thumb_height = ($height/$width) * $thumb_width;
$thumb_tmp = imagecreatetruecolor($thumb_width, $thumb_height);
$full_width = 200;
$full_height = ($height/$width) * $full_width;
$full_tmp = imagecreatetruecolor($full_width, $full_height);
imagecopyresampled($thumb_tmp, $src, 0, 0, 0, 0, $thumb_width, $thumb_height, $width, $height);
imagecopyresampled($full_tmp, $src, 0, 0, 0, 0, $full_width, $full_height, $width, $height);
imagejpeg($thumb_tmp, 'images/profile/'.$user['id'].'_'.time().'_thumb.'.$ext, 100);
imagejpeg($full_tmp, 'images/profile/'.$user['id'].'_'.time().'_full.'.$ext, 100);
imagedestroy($src);
imagedestroy($thumb_tmp);
imagedestroy($full_tmp);
// delete old image from server if it is not none.png
}
any help would be greatly appreciated! 任何帮助将不胜感激! i know that it has something to do with imagecopyresampled but i can't figure out the math for the cropping from the center of the image. 我知道这与imagecopyresampled有关,但我无法从图像中心算出裁剪的数学运算。 i want this to be my own function so please dont recommend me using other peoples classes. 我希望这是我自己的功能,所以请不要推荐我使用其他人的课程。
Right after $full_tmp = imagecreatetruecolor($full_width, $full_height);
就在$full_tmp = imagecreatetruecolor($full_width, $full_height);
, add... ,添加...
if ($thumb_width > $thumb_height) {
$thumb_offset = array('x' => ($thumb_width/2 - 25), 'y' => 0);
} else {
$thumb_offset = array('x' => 0, 'y' => ($thumb_height/2 - 25));
}
$square_tmp = imagecreatetruecolor($thumb_width, $thumb_height);
imagecopyresampled($square_tmp, $src, 0, 0, $thumb_offset['x'], $thumb_offset['y'], 50, 50, $width, $height);
Then save and destroy the temp like the other two images. 然后像其他两个图像一样保存并销毁温度。
Take a look at the parameters that should be passed to imagecopyresampled
, as per the PHP manual: 查看根据PHP手册应传递给imagecopyresampled
的参数:
imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
From the third parameter on, you basically define how a rectangle on the source image maps to a rectangle on the destination image. 从第三个参数开始,您基本上定义了源图像上的矩形如何映射到目标图像上的矩形。
So the first thing you have to do is calculate the rectanle ( x
, y
, width
and height
) which defines the visible area of your original image. 因此,您要做的第一件事是计算定义原始图像可见区域的矩形( x
, y
, width
和height
)。 These will be the 5th, 6th, 9th and 10th parameters to the function, respectively. 这些将分别是函数的第5,第6,第9和第10个参数。
For the destination rectangle, use 0,0
for x,y
, and $thumb_width,$thumb_height
for w,h
, just as you are currently doing. 对于目标矩形,用0,0
为x,y
,和$thumb_width,$thumb_height
为w,h
,就像你正在做的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.