• php图片无损压缩的问题解决(推荐)


    代码如下

      1 <?php
      2 
      3 namespace AppContract;
      4 
      5 use CarbonCarbon;
      6 
      7 /**
      8  * 图片压缩封装类
      9  * @author jackie <2019.11.20>
     10  */
     11 class CompressImageContract
     12 {
     13     /**
     14      * desription 压缩图片
     15      * @param sting $imgsrc 图片路径(服務器絕對路徑)
     16      * @param string $imgdst 压缩后保存路径(服務器絕對路徑)
     17      */
     18     public function image_png_size_add($imgsrc, $imgdst)
     19     {
     20         $zip_width = config("config.zip_width");//讀取默認最小寬度
     21         $zip_height = config("config.zip_height");//讀取默認最小高度
     22         $zip_per = config("config.zip_per");//讀取默認壓縮比例
     23 
     24         list($width, $height, $type) = getimagesize($imgsrc);
     25         $new_width = ceil(($width > 600 ? 600 : $width) * $zip_per);
     26         $new_height = ceil(($height > 600 ? 600 : $height) * $zip_per);
     27         /*$width = 3000;
     28         $height = 150;
     29         $new_width = $width * $zip_per;
     30         $new_height = $height * $zip_per;*/
     31 
     32         //寬度、高度都小於最小值,取最大比例值
     33         if ($new_width < $zip_width && $new_height < $zip_height) {
     34             $formatWidth = sprintf("%.1f", $zip_width / $width);
     35             $perWidth = $formatWidth + 0.1;
     36 
     37             $formatHeight = sprintf("%.1f", $zip_height / $height);
     38             $perHeight = $formatHeight + 0.1;
     39 
     40             $per = $perWidth >= $perHeight ? $perWidth : $perHeight;
     41             $per = $per < 1 ? $per : 1;//壓縮比例不能大於1
     42             $new_width = ceil($width * $per);
     43             $new_height = ceil($height * $per);
     44             //return $new_width.'/'.$new_height.$per.'/**1';
     45         }
     46 
     47         //寬度小於最小值,高度正常,計算寬度最小比例
     48         if ($new_width < $zip_width && $new_height > $zip_height) {
     49             $formatWidth = sprintf("%.1f", $zip_width / $width);
     50             $per = $formatWidth + 0.1;
     51             $per = $per < 1 ? $per : 1;//壓縮比例不能大於1
     52             $new_width = ceil($width * $per);
     53             $new_height = ceil($height * $per);
     54             //return $new_width . '/' . $new_height . '/' . $per . '/**2';
     55         }
     56         //寬度正常,高度小於最小值,計算高度最小比例
     57         if ($new_width > $zip_width && $new_height < $zip_height) {
     58             $formatHeight = sprintf("%.1f", $zip_height / $height);
     59             $per = $formatHeight + 0.1;
     60             $per = $per < 1 ? $per : 1;//壓縮比例不能大於1
     61             $new_width = ceil($width * $per);
     62             $new_height = ceil($height * $per);
     63             //return $new_width . '/' . $new_height . '/' . $per . '/**3';
     64         }
     65         //return $new_width . '/' . $new_height . '/' . $per . '/**4';
     66 
     67         switch ($type) {
     68             case 1:
     69                 $giftype = check_gifcartoon($imgsrc);
     70                 if ($giftype) {
     71                     header('Content-Type:image/gif');
     72                     $image_wp = imagecreatetruecolor($new_width, $new_height);
     73                     $image = imagecreatefromgif($imgsrc);
     74                     imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
     75                     imagejpeg($image_wp, $imgdst, 75);
     76                     imagedestroy($image_wp);
     77                 }
     78                 break;
     79             case 2:
     80                 header('Content-Type:image/jpeg');
     81                 $image_wp = imagecreatetruecolor($new_width, $new_height);
     82                 $image = imagecreatefromjpeg($imgsrc);
     83                 imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
     84                 imagejpeg($image_wp, $imgdst, 75);
     85                 imagedestroy($image_wp);
     86                 break;
     87             case 3:
     88                 header('Content-Type:image/png');
     89                 $image_wp = imagecreatetruecolor($new_width, $new_height);
     90                 $image = imagecreatefrompng($imgsrc);
     91                 imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
     92                 imagejpeg($image_wp, $imgdst, 75);
     93                 imagedestroy($image_wp);
     94                 break;
     95         }
     96     }
     97 
     98     /**
     99      * desription 判断是否gif动画
    100      * @param sting $image_file图片路径
    101      * @return boolean t 是 f 否
    102      */
    103     public function check_gifcartoon($image_file)
    104     {
    105         $fp = fopen($image_file, 'rb');
    106         $image_head = fread($fp, 1024);
    107         fclose($fp);
    108         return preg_match("/" . chr(0x21) . chr(0xff) . chr(0x0b) . 'NETSCAPE2.0' . "/", $image_head) ? false : true;
    109     }
    110 }

    链接:https://www.php.cn/php-weizijiaocheng-377677.html

  • 相关阅读:
    cmd输入输出重定向
    【转载】标准输入输出、错误输出、重定向标准输出
    cmd 重定向
    Windows下cmd标准输入输出重定向
    Windows 命令行输入输出重定向问题
    MATLAB数值计算与符号运算
    选择排序法 冒泡排序法 本质上是对内存进行整理
    学习笔记:Monkey runner(一)
    Monkey test
    fiddler:快速标识接口
  • 原文地址:https://www.cnblogs.com/clubs/p/11911525.html
Copyright © 2020-2023  润新知