这篇文章主要为大家详细介绍了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 ); } } |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持51comeon.cn。