PHP按一定比例压缩图片
图片压缩是我们日常开发中经常使用的操作,在如今需求很多的情况往往,上传的一张图片会被压缩成不同比例的图片,每次去操作也是一件非常繁琐的事情,于是进行了封装了一个压缩图片的操作类,希望大家遇到后,不用再为写很多压缩图片代码烦恼了。
1 <?php 2 3 /** 4 * 图片压缩操作类 5 * v1.0 6 */ 7 class Image 8 { 9 private $src; 10 private $imageinfo; 11 private $image; 12 public $percent = 0.1; 13 14 public function __construct($src) 15 { 16 $this->src = $src; 17 } 18 19 /** 20 * 打开图片 21 */ 22 public function openImage() 23 { 24 list($width, $height, $type, $attr) = getimagesize($this->src); 25 $this->imageinfo = array( 26 'width' => $width, 27 'height' => $height, 28 'type' => image_type_to_extension($type, false), 29 'attr' => $attr 30 ); 31 $fun = "imagecreatefrom" . $this->imageinfo['type']; 32 $this->image = $fun($this->src); 33 } 34 35 /** 36 * 操作图片 37 */ 38 public function thumpImage() 39 { 40 $new_width = $this->imageinfo['width'] * $this->percent; 41 $new_height = $this->imageinfo['height'] * $this->percent; 42 $image_thump = imagecreatetruecolor($new_width, $new_height); 43 //将原图复制带图片载体上面,并且按照一定比例压缩,极大的保持了清晰度 44 imagecopyresampled($image_thump, $this->image, 0, 0, 0, 0, $new_width, $new_height, $this->imageinfo['width'], $this->imageinfo['height']); 45 // imagedestroy($this->image); 46 $this->image = $image_thump; 47 } 48 49 /** 50 * 输出图片 51 */ 52 public function showImage() 53 { 54 header('Content-Type: image/' . $this->imageinfo['type']); 55 $funcs = "image" . $this->imageinfo['type']; 56 $funcs($this->image); 57 } 58 59 /** 60 * 保存图片到硬盘 61 * @param $savePaht 保存的文件夹路径 62 * @param $zip_name 压缩后图片名 63 * quality 为可选项,范围从 0(最差质量,文件更小)到 100(最佳质量,文件最大)。默认为 IJG 默认的质量值(大约 75)。 64 */ 65 public function saveImage($savePaht, $zip_name, $quality = 75) 66 { 67 if (!file_exists($savePaht)) { 68 mkdir($savePaht, 0777, true); 69 } 70 71 imagejpeg($this->image, $savePaht . $zip_name . '.' . $this->imageinfo['type'], $quality); 72 //$funcs = "image" . $this->imageinfo['type']; 73 //$funcs($this->image, $name . '.' . $this->imageinfo['type']); 74 } 75 76 /** 77 * 销毁图片 78 */ 79 public function __destruct() 80 { 81 imagedestroy($this->image); 82 } 83 } 84 85 ?>
测试:
1 <?php 2 date_default_timezone_set("Asia/Shanghai"); 3 require 'Image.php'; 4 $src = "./img/7_02M龙虾.jpg";//要压缩的的图片 5 $zip_name = 'zip_' . date("YmdHis");//压缩后图片名称 6 $savePaht = "img/";//压缩后保存路径(称服務器絕對路徑) 7 8 $image = new Image($src); 9 $image->percent = 0.2; 10 $image->openImage(); 11 $image->thumpImage(); 12 //$image->showImage();//输出图片 13 $image->saveImage($savePaht, $zip_name, 75); 14 ?>
图片:压缩前7M,压缩后83k
参考:https://mp.weixin.qq.com/s/n_Yt_Lif8SW2eR3bxerQAA
推荐采用我另一篇博客的方法:https://www.cnblogs.com/clubs/p/11911525.html