ImageResize.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. class ImageResize {
  3. public function setSize($origin,$target,$cut_width,$cut_height,$start_x,$start_y,$new_width,$new_height,$ext){
  4. ini_set("memory_limit","1000M");
  5. $new=imagecreatetruecolor($new_width,$new_height);
  6. if($ext=='jpg'){
  7. $source=imagecreatefromjpeg($origin);
  8. }else{
  9. $source=imagecreatefrompng($origin);
  10. imagesavealpha($source,true);
  11. imagealphablending($new,false);
  12. imagesavealpha($new,true);
  13. }
  14. imagecopyresampled($new,$source,0,0,$start_x,$start_y,$new_width,$new_height,$cut_width,$cut_height);
  15. if($ext=='jpg'){
  16. imagejpeg($new,$target,90);
  17. }else{
  18. imagepng($new,$target);
  19. }
  20. if(file_exists($target)){
  21. chmod($target,0777);
  22. return $target;
  23. }
  24. return false;
  25. }
  26. public function getSize($origin,$type=null) {
  27. $sizes=getimagesize($origin);
  28. if(is_null($type)){
  29. return array($sizes[0],$sizes[1]);
  30. }
  31. return $sizes[$type];
  32. }
  33. public function resize($data, $thumb = false){
  34. $origin = $data['origin'];//原图片路径
  35. $targets = $data['targets'];//目标图片集参数
  36. $ext = substr($origin, -3);//图片后缀
  37. foreach ($targets as $key=>$value){
  38. $new_width = $value['width'];
  39. $new_height = $value['height'];
  40. $target = $value['target'];
  41. if($thumb || $origin == $target) {
  42. $start_x = 0;
  43. $start_y = 0;
  44. $cut_width = $this->getSize($origin,0);
  45. $cut_height = $this->getSize($origin,1);
  46. }else {
  47. $start_x = $data['x'];//剪切起点x坐标
  48. $start_y = $data['y'];//剪切起点y坐标
  49. $cut_width = $data['w'];//剪切宽度
  50. $cut_height = $data['h'];//剪切高度
  51. }
  52. $return = $this->setSize($origin,$target,$cut_width,$cut_height,$start_x,$start_y,$new_width,$new_height,$ext);
  53. if(!$return){
  54. break;
  55. }
  56. }
  57. return $return;
  58. }
  59. }
  60. ?>