我的代码中的所有内容都适用于创建上传图片的缩略图。如何使用GD图像功能裁剪图像
现在我需要做的是裁剪从图像的中心$拇指为方形(50×50)
我的继承人功能到目前为止
$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
}
任何帮助,将不胜感激!我知道它与imagecopyresampled有关,但我无法弄清楚从图像中心裁剪的数学。我希望这是我自己的功能,所以请不要推荐我使用其他人的课程。
请勿使用_FILES数组中的[['type']'数据。它是用户提供的,可以轻松伪造。另外,不要认为上传的图像没有损坏。你不检查'imagecreatefrom ...()'函数实际上是否成功。同样,文件名也会受到竞争条件的影响 - 如果缩略图创建时间大于1秒,全尺寸图像将具有不同的文件名。也许这并不重要,但值得指出。 –