php实现图片压缩处理
本文实例为大家分享了php实现图片压缩处理的具体代码,供大家参考,具体内容如下
说明
在项目中,经常会遇到在前端页面展示用户自己上传的图片。当部分图片尺寸过大,页面图片过多的情况下(如论坛里需要显示用户头像),会引起页面加载缓慢的问题。由于用户图片已存储导数据库,无法改变库里的图片大小,只能在获取图片路径时,压缩图片
示例
以下函数为图片压缩方法
/** *图片压缩处理 *@paramstring$sFile图片路径 *@paramint$iWidth自定义图片宽度 *@paramint$iHeight自定义图片高度 */ functiongetThumb($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; } /** *获取文件后缀名 */ functionget_filetype($filename){ $extend=explode(".",$filename); returnstrtolower($extend[count($extend)-1]); } /** *解决手机上传图片被旋转问题 *@paramstring$full_filename文件路径 */ functionadjustPicOrientation($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){ case2: $mirror=true; break; case3: $deg=180; break; case4: $deg=180; $mirror=true; break; case5: $deg=270; $mirror=true; break; case6: $deg=270; break; case7: $deg=90; $mirror=true; break; case8: $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); /** *生成图片 *@paramstring$im源图片路径 *@paramstring$dest目标图片路径 *@paramint$maxwidth生成图片宽 *@paramint$maxheight生成图片高 */ functionresizeImage($im,$dest,$maxwidth,$maxheight){ $img=getimagesize($im); switch($img[2]){ case1: $im=@imagecreatefromgif($im); break; case2: $im=@imagecreatefromjpeg($im); break; case3: $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); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。