php的GD库能否按百分比压缩图片?
大家讲道理
大家讲道理 2017-04-10 16:20:50
[PHP讨论组]

用php的GD库压缩图片时,可以填入具体的宽和高进行压缩。那么,能否按百分比压缩呢,比如压缩为原图的90%,80%....等?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(2)
天蓬老师

可以啊,中午刚给朋友搞了个压缩的,

    <?php
    /*+-----------------------------------------------------------------------+*/
    /*+ jpg,gif,png图片等比例压缩                                             +*/
    /*+-----------------------------------------------------------------------+*/
    class RarImag{
     /**
      * 得到等比例缩放的长宽
      */
     function getNewSize($maxWidth, $maxHeight, $srcWidth, $srcHeight) {
      if($srcWidth > $maxWidth) {
       $maxWidth = $maxWidth;
       if($srcHeight > $maxHeight) {
        $maxHeight = ($srcHeight/$srcHeight) * $maxWidth;
       } else {
         $maxHeight = $srcHeight;
       }
       return array('width' => $maxWidth,'height' => $maxHeight);
      }
    
      if($srcHeight > $maxHeight) {
       $maxHeight = $maxHeight;
       if($srcWidth > $maxWidth) {
         $maxWidth = ($srcWidth/$srcHeight) * $maxHeight;
       } else {
         $maxWidth = $srcWidth;
       }
       return array('width' => $srcWidth,'height' => $maxHeight);
      }
    
      return array('width' => $srcWidth,'height' => $srcHeight);
    }
     /**
      * 等比例生成缩略图
      *
      * @param  String  $srcFile  原始文件路径
      * @param  String  $dstFile  目标文件路径
      * @param  Integer  $maxWidth  生成的目标文件的最大宽度
      * @param  Integer  $maxHeight  生成的目标文件的最大高度
      * @return  Boolean  生成成功则返回true,否则返回false
      */
     function makeThumb($srcFile, $dstFile, $maxWidth, $maxHeight) {
      if ($size = getimagesize($srcFile)) {
       $srcWidth = $size[0];
       $srcHeight = $size[1];
       $mime = $size['mime'];
       switch ($mime) {
        case 'image/jpeg';
         $isJpeg = true;
         break;
        case 'image/gif';
         $isGif = true;
         break;
        case 'image/png';
         $isPng = true;
         break;
        default:
         return false;
         break;
       }
       //header("Content-type:$mime");
       $arr = $this->getNewSize($maxWidth, $maxHeight, $srcWidth, $srcHeight);
       $thumbWidth = $arr['width'];
       $thumbHeight = $arr['height'];
       if (isset($isJpeg) && $isJpeg) {
        $dstThumbPic = imagecreatetruecolor($thumbWidth, $thumbHeight);
        $srcPic = imagecreatefromjpeg($srcFile);
        imagecopyresampled($dstThumbPic, $srcPic, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $srcWidth, $srcHeight);
        imagejpeg($dstThumbPic, $dstFile, 100);
        imagedestroy($dstThumbPic);
        imagedestroy($srcPic);
        return true;
       } elseif (isset($isGif) && $isGif) {
        $dstThumbPic = imagecreatetruecolor($thumbWidth, $thumbHeight);
        //创建透明画布
        imagealphablending($dstThumbPic, true);
        imagesavealpha($dstThumbPic, true);
        $trans_colour = imagecolorallocatealpha($dstThumbPic, 0, 0, 0, 127);
        imagefill($dstThumbPic, 0, 0, $trans_colour);
        $srcPic = imagecreatefromgif($srcFile);
        imagecopyresampled($dstThumbPic, $srcPic, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $srcWidth, $srcHeight);
        imagegif($dstThumbPic, $dstFile);
        imagedestroy($dstThumbPic);
        imagedestroy($srcPic);
        return true;
       } elseif (isset($isPng) && $isPng) {
        $dstThumbPic = imagecreatetruecolor($thumbWidth, $thumbHeight);
        //创建透明画布
        imagealphablending($dstThumbPic, true);
        imagesavealpha($dstThumbPic, true);
        $trans_colour = imagecolorallocatealpha($dstThumbPic, 0, 0, 0, 127);
        imagefill($dstThumbPic, 0, 0, $trans_colour);
        $srcPic = imagecreatefrompng($srcFile);
        imagecopyresampled($dstThumbPic, $srcPic, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $srcWidth, $srcHeight);
        imagepng($dstThumbPic, $dstFile);
        imagedestroy($dstThumbPic);
        imagedestroy($srcPic);
        return true;
       } else {
        return false;
       }
      } else {
       return false;
      }
     }
    }
    ?>
PHP中文网

imagejpeg() 有一个参数可以设定压缩比例
http://php.net/manual/zh/function.imagejpeg.php

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号