PHP图像处理绘图、水印、验证码、图像压缩技术实例总结(3)

4、图像压缩

  对图像进行压

  缩处理非常简单,因为就一个函数

  参数1:目标图像资源(画布)

  参数2:等待压缩图像资源

  参数3:目标点的x坐标

  参数4:目标点的y坐标

  参数5:原图的x坐标

  参数6:原图的y坐标

  参数7:目的地宽度(画布宽)

  参数8:目的地高度(画布高)

  参数9:原图宽度

  参数10:原图高度

  imagecopyresampled($1,$2,$3,$4,$5,$6,$7,$8,$9,$10)

  封装的图像压缩类

  1. <?php
  2. /*
  3. * 图像压缩处理类
  4. */
  5. class Thumb
  6. {
  7. private $_filename; //等待压缩的图像
  8. private $_thumb_path = 'thumb/'; //压缩图像的保存目录
  9. public function __set($p,$v)
  10. {
  11. if(property_exists($this,$p)){
  12. $this -> $p = $v;
  13. }
  14. }
  15. //构造方法初始化需要压缩的图像
  16. public function __construct($file)
  17. {
  18. if(!file_exists($file)){
  19. echo '文件有误,不能压缩';
  20. return;
  21. }
  22. $this -> _filename = $file;
  23. }
  24. //图像压缩处理
  25. function makeThumb($area_w,$area_h)
  26. {
  27. $src_image = imagecreatefrompng($this->_filename);
  28. $res = getimagesize($this->_filename);
  29. echo '<pre>';
  30. var_dump($res);
  31. die;
  32. $dst_x = 0;
  33. $dst_y = 0;
  34. $src_x = 0;
  35. $src_y = 0;
  36. //原图的宽度、高度
  37. $src_w = imagesx($src_image); //获得图像资源的宽度
  38. $src_h = imagesy($src_image); //获得图像资源的高度
  39. if($src_w / $area_w < $src_h/$area_h){
  40. $scale = $src_h/$area_h;
  41. }
  42. if($src_w / $area_w >= $src_h/$area_h){
  43. $scale = $src_w / $area_w;
  44. }
  45. $dst_w = (int)($src_w / $scale);
  46. $dst_h = (int)($src_h / $scale);
  47. $dst_image = imagecreatetruecolor($dst_w,$dst_h);
  48. $color = imagecolorallocate($dst_image,255,255,255);
  49. //将白色设置为透明色
  50. imagecolortransparent($dst_image,$color);
  51. imagefill($dst_image,0,0,$color);
  52. imagecopyresampled($dst_image,$src_image,$dst_x,$dst_y,$src_x,$src_y,$dst_w,$dst_h,$src_w,$src_h);
  53. //可以在浏览器直接显示
  54. //header("Content-Type:image/png");
  55. //imagepng($dst_image);
  56. //分目录保存压缩的图像
  57. $sub_path = date('Ymd').'/';
  58. //规范:上传的图像保存到upload目录,压缩的图像保存到thumb目录
  59. if(!is_dir($this -> _thumb_path . $sub_path)){
  60. mkdir($this -> _thumb_path . $sub_path,0777,true);
  61. }
  62. $filename = $this -> _thumb_path . $sub_path.'thumb_'.$this->_filename;
  63. //也可以另存为一个新的图像
  64. imagepng($dst_image,$filename);
  65. return $filename;
  66. }
  67. }
  68. $thumb = new Thumb('upload.jpg');
  69. $thumb -> _thumb_path = 'static/thumb/';
  70. $file = $thumb -> makeThumb(100,50);
  71. // var_dump($file);

  以上就是PHP图像处理绘图、水印、验证码、图像压缩技术实例总结介绍,希望本文所述对大家PHP程序设计有所帮助。