当前位置:Gxlcms > PHP教程 > phpgd库实现图片大小裁剪与缩放

phpgd库实现图片大小裁剪与缩放

时间:2021-07-01 10:21:17 帮助过:13人阅读

  1. //图片裁剪、缩放函数
  2. //$filepath图片路径,$percent缩放百分比
  3. function imagepress($filepath,$percent='0.5'){
  4. // 图片类型
  5. header('Content-Type: image/jpeg');
  6. // 获得新的图片大小
  7. list($width, $height) = getimagesize($filepath);
  8. $new_width = $width * $percent;
  9. $new_height = $height * $percent;
  10. // 重新取样
  11. $image_p = imagecreatetruecolor($new_width, $new_height);
  12. $image = imagecreatefromjpeg($filepath);
  13. imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
  14. // 输出
  15. return imagejpeg($image_p, null, 100);
  16. }

原图: php gd库图片大小裁剪与缩放

效果图: https://www.gxlcms.com/d/file/2015/03/20150303070128641.jpg

例子:

  1. //$filepath图片路径,$new_width新的宽度,$new_height新的高度

  2. function imagepress($filepath, $new_width, $new_height)
  3. {
  4. $source_info = getimagesize($filepath);
  5. $source_width = $source_info[0];
  6. $source_height = $source_info[1];
  7. $source_mime = $source_info['mime'];
  8. $source_ratio = $source_height / $source_width;
  9. $target_ratio = $new_height / $new_width;

  10. // 源图过高

  11. if ($source_ratio > $target_ratio)
  12. {
  13. $cropped_width = $source_width;
  14. $cropped_height = $source_width * $target_ratio;
  15. $source_x = 0;
  16. $source_y = ($source_height - $cropped_height) / 2;
  17. }
  18. // 源图过宽
  19. elseif ($source_ratio < $target_ratio)
  20. {
  21. $cropped_width = $source_height / $target_ratio;
  22. $cropped_height = $source_height;
  23. $source_x = ($source_width - $cropped_width) / 2;
  24. $source_y = 0;
  25. }
  26. // 源图适中
  27. else
  28. {
  29. $cropped_width = $source_width;
  30. $cropped_height = $source_height;
  31. $source_x = 0;
  32. $source_y = 0;
  33. }
  34. switch ($source_mime)
  35. {
  36. case 'image/gif':
  37. $source_image = imagecreatefromgif($filepath);
  38. break;
  39. case 'image/jpeg':
  40. $source_image = imagecreatefromjpeg($filepath);
  41. break;
  42. case 'image/png':
  43. $source_image = imagecreatefrompng($filepath);
  44. break;
  45. default:
  46. return false;
  47. break;
  48. }
  49. $target_image = imagecreatetruecolor($new_width, $new_height);
  50. $cropped_image = imagecreatetruecolor($cropped_width, $cropped_height);
  51. // 裁剪
  52. imagecopy($cropped_image, $source_image, 0, 0, $source_x, $source_y, $cropped_width, $cropped_height);
  53. // 缩放
  54. imagecopyresampled($target_image, $cropped_image, 0, 0, 0, 0, $new_width, $new_height, $cropped_width, $cropped_height);
  55. header('Content-Type: image/jpeg');
  56. imagejpeg($target_image);
  57. imagedestroy($source_image);
  58. imagedestroy($target_image);
  59. imagedestroy($cropped_image);
  60. }

人气教程排行