PHP 图片压缩(GD库)
需要安装GD库扩展,安装lnmp的是自动开启的
/*
* 压缩图片
* $imgsrc 文件路径
* $size_kb 压缩大小
* $number 压缩指数
* 说明 压缩大小是有最低限制的,正常来说足够使用
*/
function yasuo_image($imgsrc,$size_kb,$number=50){
chmod($imgsrc, 0777); #给图片赋权限
$imgdst = $imgsrc; #(新文件地址)覆盖源文件
list($width, $height, $type) = getimagesize($imgsrc);
$new_width = $width;//压缩后的图片宽
$new_height = $height;//压缩后的图片高
if($width >= 2000){
$per = 2000 / $width;//计算比例
$new_width = $width * $per;
$new_height = $height * $per;
}
switch ($type) {
case 1:
$giftype = check_gifcartoon($imgsrc);
if ($giftype) {
header('Content-Type:image/gif');
$image_wp = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromgif($imgsrc);
imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
//90代表的是质量、压缩图片容量大小
imagejpeg($image_wp, $imgdst, $number);
imagedestroy($image_wp);
imagedestroy($image);
}
break;
case 2:
header('Content-Type:image/jpeg');
$image_wp = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($imgsrc);
imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
//90代表的是质量、压缩图片容量大小
imagejpeg($image_wp, $imgdst, $number);
imagedestroy($image_wp);
imagedestroy($image);
break;
case 3:
header('Content-Type:image/png');
$image_wp = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefrompng($imgsrc);
imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
//90代表的是质量、压缩图片容量大小
imagejpeg($image_wp, $imgdst, $number);
imagedestroy($image_wp);
imagedestroy($image);
break;
}
#清除文件资源缓存
clearstatcache();
$filesize = filesize($imgdst);
$size = $size_kb * 1024; //压缩后最大为多大
if($filesize <= $size){
return $imgdst;
}else{
$number = floor($number/2);
if($number > 1){
$imgdst = yasuo_image($imgdst,$size_kb,$number);
}
}
return $imgdst;
}