//图片地址 希望宽度 希望高度 希望最大大小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
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)
imagedestroy($now_img)
$tmpFileList[] = $tmpFile
$i -= $step
clearstatcache()
$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)
}