AI智能
改变未来

php实现图片压缩处理

本文实例为大家分享了php实现图片压缩处理的具体代码,供大家参考,具体内容如下

说明

在项目中,经常会遇到在前端页面展示用户自己上传的图片。当部分图片尺寸过大,页面图片过多的情况下(如论坛里需要显示用户头像),会引起页面加载缓慢的问题。由于用户图片已存储导数据库,无法改变库里的图片大小,只能在获取图片路径时,压缩图片

示例

以下函数为图片压缩方法

/*** 图片压缩处理* @param string $sFile 图片路径* @param int $iWidth 自定义图片宽度* @param int $iHeight 自定义图片高度*/function getThumb($sFile,$iWidth,$iHeight){//判断该图片是否存在if(!file_exists(public_path().$sFile)) return $sFile;//判断图片格式$attach_fileext = get_filetype($sFile);if (!in_array($attach_fileext, array(\'jpg\',\'png\',\'jpeg\'))){return $sFile;}//压缩图片$sFileNameS = str_replace(\".\".$attach_fileext, \"_\".$iWidth.\'_\'.$iHeight.\'.\'.$attach_fileext, $sFile);//判断是否已压缩图片,若是则返回压缩图片路径if(file_exists(public_path().$sFileNameS)){return $sFileNameS;}//解决手机端上传图片被旋转问题if (in_array($attach_fileext, array(\'jpeg\')) ){adjustPicOrientation(public_path().$sFile);}//生成压缩图片,并存储到原图同路径下resizeImage(public_path().$sFile, public_path().$sFileNameS, $iWidth, $iHeight);if(!file_exists(public_path().$sFileNameS)){return $sFile;}return $sFileNameS;}/***获取文件后缀名*/function get_filetype($filename) {$extend = explode(\".\" , $filename);return strtolower($extend[count($extend) - 1]);}/*** 解决手机上传图片被旋转问题* @param string $full_filename 文件路径*/function adjustPicOrientation($full_filename){$exif = exif_read_data($full_filename);if($exif && isset($exif[\'Orientation\'])) {$orientation = $exif[\'Orientation\'];if($orientation != 1){$img = imagecreatefromjpeg($full_filename);$mirror = false;$deg  = 0;switch ($orientation) {case 2:$mirror = true;break;case 3:$deg = 180;break;case 4:$deg = 180;$mirror = true;break;case 5:$deg = 270;$mirror = true;break;case 6:$deg = 270;break;case 7:$deg = 90;$mirror = true;break;case 8:$deg = 90;break;}if ($deg) $img = imagerotate($img, $deg, 0);if ($mirror) $img = _mirrorImage($img);//$full_filename = str_replace(\'.jpg\', \"-O$orientation.jpg\", $full_filename);新文件名imagejpeg($img, $full_filename, 95);}}return $full_filename;}resizeImage(public_path().$sFile, public_path().$sFileNameS, $iWidth, $iHeight);/*** 生成图片* @param string $im 源图片路径* @param string $dest 目标图片路径* @param int $maxwidth 生成图片宽* @param int $maxheight 生成图片高*/function resizeImage($im, $dest, $maxwidth, $maxheight) {$img = getimagesize($im);switch ($img[2]) {case 1:$im = @imagecreatefromgif($im);break;case 2:$im = @imagecreatefromjpeg($im);break;case 3:$im = @imagecreatefrompng($im);break;}$pic_width = imagesx($im);$pic_height = imagesy($im);$resizewidth_tag = false;$resizeheight_tag = false;if (($maxwidth && $pic_width > $maxwidth) || ($maxheight && $pic_height > $maxheight)) {if ($maxwidth && $pic_width > $maxwidth) {$widthratio = $maxwidth / $pic_width;$resizewidth_tag = true;}if ($maxheight && $pic_height > $maxheight) {$heightratio = $maxheight / $pic_height;$resizeheight_tag = true;}if ($resizewidth_tag && $resizeheight_tag) {if ($widthratio < $heightratio)$ratio = $widthratio;else$ratio = $heightratio;}if ($resizewidth_tag && !$resizeheight_tag)$ratio = $widthratio;if ($resizeheight_tag && !$resizewidth_tag)$ratio = $heightratio;$newwidth = $pic_width * $ratio;$newheight = $pic_height * $ratio;if (function_exists(\"imagecopyresampled\")) {$newim = imagecreatetruecolor($newwidth, $newheight);imagecopyresampled($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $pic_width, $pic_height);} else {$newim = imagecreate($newwidth, $newheight);imagecopyresized($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $pic_width, $pic_height);}imagejpeg($newim, $dest);imagedestroy($newim);} else {imagejpeg($im, $dest);}}

以上就是本文的全部内容,希望对大家的学习有所帮助

您可能感兴趣的文章:

  • php高清晰度无损图片压缩功能的实现代码
  • PHP实现图片压缩
  • PHP多个图片压缩成ZIP的方法
  • PHP实现图片压缩的两则实例
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » php实现图片压缩处理