最新公告
  • 欢迎加入中国站长资源网团队,精品资源持续增加!立即加入我们
  • 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图片压缩裁剪处理方法

    常见问题FAQ

    【点击查看】免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    【点击查看】提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    【点击查看】开通终身至尊下载源码 “不完整” 或 “不能用” 怎么办?
    非常抱歉,你有权利告诉本站,但是本站有选择处理或者不处理的权力,如无法接受请不要开通本站会员。
    【点击查看】开通终身会员能下载全站资源码?
    可以100%下载全站源码资源的,除部分失效资源,失效的可以联系客服尝试恢复。

    发表评论