rinald_未来往事

PHP高质量不失真等比例图片缩放类

PHP
php图片缩放类,php不失真图片缩放类,php高质量缩略图,php缩略图函数,php无损缩放,php图片缩放后模糊解决,图片缩略图质量低解决方法。在PHP网站开发过程中,如果你建立的网站涉及大量的图片处理,必然涉及到图片上传、缩放,而如何保持图片不失真,是很多初级PHP网站开发者比较头疼的一件事,今天未来往事<http://fity.cn>就和大家分享一下如何进行等比例不失真图片缩放。

首先我们来了解几个php函数:
imagepng()http://cn2.php.net/manual/en/function.imagepng.php
注:函数的第三个参数的数值区间控制图片的质量,与imagejpeg()函数不同,imagepng()函数的区间值是0-9 (0表示质量最高,9表示质量最低)。PHP 5.1.2+支持。
imagegif()http://cn2.php.net/manual/en/function.imagegif.php
imagejpeg()http://cn2.php.net/manual/en/function.imagejpeg.php
注:函数的第三个参数控制图片的质量,区间0-100 (0表示质量最低,100表示质量最高. 默认75)

附类代码:
  1. <?php  
  2.   
  3. class resizeimage    
  4. {    
  5.    //图片类型    
  6.    var $type;    
  7.    //实际宽度    
  8.    var $width;    
  9.    //实际高度    
  10.    var $height;    
  11.    //改变后的宽度    
  12.    var $resize_width;    
  13.    //改变后的高度    
  14.    var $resize_height;    
  15.    //是否裁图    
  16.    var $cut;    
  17.    //源图象    
  18.    var $srcimg;    
  19.    //目标图象地址  
  20.    var $dstimg;    
  21.    //临时创建的图象   
  22.    var $im;    
  23.     
  24.    function resizeimage($img$wid$hei,$cut,$dst_img)  //源图像 | 宽 | 高 | 是否裁切 | 目标地址  
  25.    {    
  26.        $this->srcimg = $img;    
  27.        $this->resize_width = $wid;    
  28.        $this->resize_height = $hei;    
  29.        $this->cut = $cut;    
  30.        //图片的类型    
  31.        $this->type = substr(strrchr($this->srcimg,"."),1);    
  32.        //初始化图象    
  33.        $this->init_img();  
  34.        //目标图象地址    
  35.        $this -> dst_img($dst_img);  
  36.        //--    
  37.        $this->width = imagesx($this->im);    
  38.        $this->height = imagesy($this->im);    
  39.        //生成图象    
  40.        $this->newimg();    
  41.        ImageDestroy ($this->im);    
  42.    }   
  43.    //欢迎来访未来往事<http://fity.cn>  
  44.    function newimg()    
  45.    {    
  46.        //改变后的图象的比例  
  47.        $resize_ratio = ($this->resize_width)/($this->resize_height);    
  48.        //实际图象的比例    
  49.        $ratio = ($this->width)/($this->height);    
  50.   
  51.        if(($this->cut)=="1")    
  52.        //裁图  
  53.        {    
  54.            if($ratio>=$resize_ratio)    
  55.            //高度优先    
  56.            {    
  57.                $newimg = imagecreatetruecolor($this->resize_width,$this->resize_height);    
  58.                imagecopyresampled($newimg$this->im, 0, 0, 0, 0, $this->resize_width,$this->resize_height, (($this->height)*$resize_ratio), $this->height);    
  59.                $this->quality_deal($newimg);  
  60.            }    
  61.            if($ratio<$resize_ratio)    
  62.            //宽度优先    
  63.            {    
  64.                $newimg = imagecreatetruecolor($this->resize_width,$this->resize_height);    
  65.                imagecopyresampled($newimg$this->im, 0, 0, 0, 0, $this->resize_width, $this->resize_height, $this->width, (($this->width)/$resize_ratio));    
  66.                $this->quality_deal($newimg);  
  67.            }    
  68.        }    
  69.        else    
  70.        //不裁图    
  71.        {    
  72.            if($ratio>=$resize_ratio)    
  73.            {    
  74.                $newimg = imagecreatetruecolor($this->resize_width,($this->resize_width)/$ratio);    
  75.                imagecopyresampled($newimg$this->im, 0, 0, 0, 0, $this->resize_width, ($this->resize_width)/$ratio$this->width, $this->height);    
  76.                $this->quality_deal($newimg);  
  77.            }    
  78.            if($ratio<$resize_ratio)    
  79.            {    
  80.                $newimg = imagecreatetruecolor(($this->resize_height)*$ratio,$this->resize_height);    
  81.                imagecopyresampled($newimg$this->im, 0, 0, 0, 0, ($this->resize_height)*$ratio$this->resize_height, $this->width, $this->height);    
  82.                $this->quality_deal($newimg);  
  83.            }    
  84.        }  
  85.        
  86.    }   
  87.    //初始化图象      欢迎来访未来往事<http://fity.cn>  
  88.    function init_img()    
  89.    {    
  90.        if($this->type=="jpg")    
  91.        {    
  92.            $this->im = imagecreatefromjpeg($this->srcimg);    
  93.        }    
  94.        if($this->type=="gif")    
  95.        {    
  96.            $this->im = imagecreatefromgif($this->srcimg);    
  97.        }    
  98.        if($this->type=="png")    
  99.        {    
  100.            $this->im = imagecreatefrompng($this->srcimg);    
  101.        }    
  102.    }    
  103.    //图象目标地址    
  104.    function dst_img($dst_img)    
  105.    {    
  106.        $full_length  = strlen($this->srcimg);    
  107.        $type_length  = strlen($this->type);    
  108.        $name_length  = $full_length-$type_length;    
  109.        //$name         = substr($this->srcimg,0,$name_length-1);    
  110.        //$this->dstimg = $name."_new.".$this->type;    
  111.        $this->dstimg = $dst_img;  
  112.   
  113.    }  
  114.      
  115.    //缩略图质量处理 By:未来往事<http://fity.cn  rinald@fity.cn>  
  116.    function quality_deal($newimg){  
  117.        
  118.      $ext_type = strtolower($this->type);  
  119.   
  120.      if$ext_type === 'jpg' || $ext_type === 'jpeg' ){  
  121.        ImageJpeg ($newimg,$this->dstimg,100); //图片质量100-0  
  122.      }elseif($ext_type === 'png'){  
  123.        imagepng ($newimg,$this->dstimg,0); //图片质量0-9  
  124.      }elseif($ext_type === 'gif'){  
  125.        imagegif ($newimg,$this->dstimg);  
  126.      }else{  
  127.        ImageJpeg ($newimg,$this->dstimg);  
  128.      }  
  129.        
  130.    }  
  131.      
  132. }  
  133.   
  134. //使用方法  
  135. $resizeimage = new resizeimage("test.jpg""224""126""0");    

原文作者:rinald
原文地址:http://fity.cn/post/562.html
互联网技术更新较快,本站很多文章具有实效性,我会及时更新原文,但转载的文章无法通知更新。为了不给读者造成困惑或误导,请您在转载时保留此出处信息,尊重别人也是尊重自己。

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。