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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。