//图片地址 希望宽度 希望高度 希望最大大小kb 存储路径 名称
public function compressImg($srcFile,$to_width,$to_height,$maxFileSize,$local_dir,$filename)
{
$info = getimagesize($srcFile);
$bits = get_headers($srcFile,true);//获取线上图片大小
$filesize = $bits['Content-Length']/1024;//字节数,除以1024为K数
if ($filesize <= $maxFileSize) {
return 0;
}
if ($filesize > 1024) {
$i = 80;
} elseif ($filesize > 500) {
$i = 90;
} else {
$i = 99;
}
//取得当前图片大小
$width = $info[0];
$height = $info[1];
//将文件载入到资源变量im中 1 = GIF,2 = JPG,3 = PNG
switch ($info[2]) {
case 1:
$im = imagecreatefromgif($srcFile);
$img_type = "gif";
break;
case 2:
$im = imagecreatefromjpeg($srcFile);
$img_type = "jpg";
break;
case 3:
$im = imagecreatefrompng($srcFile);
$img_type = "png";
break;
}
do {
if ($i < 0) {
return -1;
}
if ($filesize > 1024) {
$step = 5;
} elseif ($filesize > 500) {
$step = 3;
} else {
$step = 2;
}
$tmpFile = $local_dir . time() . '.'.$img_type; //临时文件
$now_img = imagecreatetruecolor($to_width, $to_height); //新建一个真彩色图像
//重采样拷贝部分图像并调整大小 可保持较好的清晰度
imagecopyresampled($now_img, $im, 0, 0, 0, 0, $to_width, $to_height, $width, $height);
imagejpeg($now_img, $tmpFile, $i); //保存质量为$i的图片文件
imagedestroy($now_img); //销毁图片资源
$tmpFileList[] = $tmpFile;
$i -= $step;
clearstatcache(); //filesize函数的结果会被缓存,使用此函数清除文件状态缓存
$filesize = filesize($tmpFile)/1024;
} while ($filesize > $maxFileSize);
copy($tmpFile, $filename); //替换源图片
foreach ($tmpFileList as $tmpFile) { //删除临时文件
if (is_file($tmpFile)) {
@unlink($tmpFile);
}
}
//上传到OSS
$Oss = new Oss();
$object = 'uid' . UID . '/' . $filename;
$oss = $Oss->ossUploadFile($object, $filename, true);
$url = $oss['info']['url'];
return $url;
}
//压缩图片
public function getImg(){
$local_dir = 'uploads/';//临时存储的路径
createFile($local_dir);
$filename = "uploads/".time().'.jpg';
$srcFile = "远程图片路径";
$url = $this->compressImg($srcFile,200,200,5,$local_dir,$filename);
dump($url);
}
复制代码
近期评论