Heim  >  Artikel  >  Backend-Entwicklung  >  So komprimieren Sie Bilder in PHP und bewahren dabei die Klarheit

So komprimieren Sie Bilder in PHP und bewahren dabei die Klarheit

王林
王林Original
2019-12-14 09:10:335323Durchsuche

So komprimieren Sie Bilder in PHP und bewahren dabei die Klarheit

Detaillierten Code direkt anzeigen:

Kostenloses Teilen von Lernvideo-Tutorials: PHP-Video-Tutorial

<?php
 
/**
 * 图片压缩类:通过缩放来压缩。如果要保持源图比例,把参数$percent保持为1即可。
 * 即使原比例压缩,也可大幅度缩小。数码相机4M图片。也可以缩为700KB左右。如果缩小比例,则体积会更小。
 * 结果:可保存、可直接显示。
 */
class imgCompression{
 
       private $src;
       private $image;
       private $imageinfo;
       private $percent = 0.5;
       /**
        * 图片压缩
        * @param $src 源图
        * @param float $percent  压缩比例
        */
       public function __construct($src, $percent=1)
       {
              $this->src = $src;
              $this->percent = $percent;
       }
 
 
       /** 高清压缩图片
        * @param string $saveName  提供图片名(可不带扩展名,用源图扩展名)用于保存。或不提供文件名直接显示
        */
       public function compressImg($saveName=&#39;&#39;)
       {
              $this->_openImage();
              if(!empty($saveName)) $this->_saveImage($saveName);  //保存
              else $this->_showImage();
       }
 
       /**
        * 内部:打开图片
        */
       private function _openImage()
       {
              list($width, $height, $type, $attr) = getimagesize($this->src);
              $this->imageinfo = array(
                     &#39;width&#39;=>$width,
                     &#39;height&#39;=>$height,
                     &#39;type&#39;=>image_type_to_extension($type,false),
                     &#39;attr&#39;=>$attr
              );
              $fun = "imagecreatefrom".$this->imageinfo[&#39;type&#39;];
              $this->image = $fun($this->src);
              $this->_thumpImage();
       }
       /**
        * 内部:操作图片
        */
       private function _thumpImage()
       {
              $new_width = $this->imageinfo[&#39;width&#39;] * $this->percent;
              $new_height = $this->imageinfo[&#39;height&#39;] * $this->percent;
              $image_thump = imagecreatetruecolor($new_width,$new_height);
              //将原图复制带图片载体上面,并且按照一定比例压缩,极大的保持了清晰度
              imagecopyresampled($image_thump,$this->image,0,0,0,0,$new_width,$new_height,
              $this->imageinfo[&#39;width&#39;],$this->imageinfo[&#39;height&#39;]);
              imagedestroy($this->image);
              $this->image = $image_thump;
       }
       /**
        * 输出图片:保存图片则用saveImage()
        */
       private function _showImage()
       {
              header(&#39;Content-Type: image/&#39;.$this->imageinfo[&#39;type&#39;]);
              $funcs = "image".$this->imageinfo[&#39;type&#39;];
              $funcs($this->image);
       }
       /**
        * 保存图片到硬盘:
        * @param  string $dstImgName  1、可指定字符串不带后缀的名称,使用源图扩展名 。
        * 2、直接指定目标图片名带扩展名。
        */
       private function _saveImage($dstImgName)
       {
              if(empty($dstImgName)) return false;
              $allowImgs = [&#39;.jpg&#39;, &#39;.jpeg&#39;, &#39;.png&#39;, &#39;.bmp&#39;, &#39;.wbmp&#39;,&#39;.gif&#39;];   
              //如果目标图片名有后缀就用目标图片扩展名 后缀,如果没有,则用源图的扩展名
              $dstExt =  strrchr($dstImgName ,".");
              $sourseExt = strrchr($this->src ,".");
              if(!empty($dstExt)) $dstExt =strtolower($dstExt);
              if(!empty($sourseExt)) $sourseExt =strtolower($sourseExt);
 
              //有指定目标名扩展名
              if(!empty($dstExt) && in_array($dstExt,$allowImgs)){
                     $dstName = $dstImgName;
              }elseif(!empty($sourseExt) && in_array($sourseExt,$allowImgs)){
                     $dstName = $dstImgName.$sourseExt;
              }else{
                     $dstName = $dstImgName.$this->imageinfo[&#39;type&#39;];
              }
              $funcs = "image".$this->imageinfo[&#39;type&#39;];
              $funcs($this->image,$dstName);
       }
 
       /**
        * 销毁图片
        */
       public function __destruct(){
              imagedestroy($this->image);
       }
 
}

// eg:
$source = &#39;img.jpg&#39;;//原图
$dst_img = &#39;img1.jpg&#39;; //可加存放路径
$percent = 1;  //压缩比例 原图压缩,不缩放

$image = new imgCompression($source,$percent);
$image->compressImg($dst_img);

?>

Empfohlene Tutorials zu verwandten Artikeln: PHP-Tutorial

Das obige ist der detaillierte Inhalt vonSo komprimieren Sie Bilder in PHP und bewahren dabei die Klarheit. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn