当前位置:首页 > PHP教程 > php类库 > 列表

PHP的一个完美GIF等比缩放类,附带去除缩放黑背景

发布:smiling 来源: PHP粉丝网  添加日期:2020-11-05 11:20:40 浏览: 评论:0 

我这里没有判断文件类型,因为png和jpeg缩放后都不会出现黑色背景,就单独gif不行..查了下资料发现了一个完美的解决办法,附带有详解,现在写东西都喜欢封装成类.....大家调用一下就行了..我就不说怎么调用了,代码如下:

  1. <?php 
  2. class resize_image{ 
  3.    private $o_img_width;//原图像宽度 
  4.    private $o_img_height;//原图像高度 
  5.    private $n_img_width;//新图像宽度 
  6.    private $n_img_height;//新图像高度 
  7.    private $o_img_file;//原图像文件 
  8.    private $o_img_source;//原图像资源 
  9.    private $n_img_file;//新图像资源 
  10.    private $n_img_source;//新图像资源 
  11.    private $o_to_n_per=0.5;//图像缩放比 
  12.  
  13.    //初始化内部变量 
  14.    function __construct($oldfile,$newfile){ 
  15.        list($width,$height)=getimagesize($oldfile); 
  16.        $this->o_img_file=$oldfile
  17.        $this->o_img_width=$width
  18.        $this->o_img_height=$height
  19.        $this->n_img_file=$newfile
  20.    } 
  21.  
  22.    //等比例缩放并且解决GIF透明色为黑色背景的问题 
  23.    function get_resize_scaling_img(){ 
  24.        $this->n_img_width=$this->o_img_width*$this->o_to_n_per; 
  25.        $this->n_img_height=$this->o_img_height*$this->o_to_n_per; 
  26.        //等比例缩放图片(算法) 
  27.        if ( $this->n_img_width && ( $this->o_img_width <$this->o_img_height)) 
  28.        { 
  29.              $this->n_img_width = ( $this->n_img_height/$this->o_img_height) * $this->o_img_width; 
  30.        } 
  31.        else 
  32.        { 
  33.             $this->n_img_height = ($this->n_img_width / $this->o_img_width) * $this->o_img_height; 
  34.        }  
  35.        $this->o_img_source=imagecreatefromgif($this->o_img_file); 
  36.        //创建一个等比例缩放大小的画布 
  37.        $this->n_img_source=imagecreatetruecolor($this->o_img_width,$this->n_img_height); 
  38.  
  39.        //美化:去除黑色不透明背景 
  40.        $trans_init=imagecolortransparent($this->o_img_source); 
  41.        //寻找透明色并且判断是否在总颜色中 
  42.        if($trans_init>=0 && $trans_init < imagecolorstotal($this->o_img_source)){ 
  43.            //如果在的话则搜索这个颜色的RGB色相 
  44.            $trans_index=imagecolorsforindex($this->o_img_source,$trans_init); 
  45.            //找到之后就创建这样一个颜色 
  46.            $trans_new=imagecolorallocate($this->n_img_source,$trans_index["red"],$trans_index["green"],$trans_index["blue"]); 
  47.            //然后我们用这个颜色去填充新的图像 
  48.            imagefill($this->n_img_source,0,0,$trans_new); 
  49.            //然后我们在把填充色设置为透明 
  50.            imagecolortransparent($this->n_img_source,$trans_new); 
  51.        } 
  52.        //拷贝原图像到新画板上 
  53.        imagecopyresized($this->n_img_source,$this->o_img_source,0,0,0,0,$this->n_img_width,$this->n_img_height,$this->o_img_width,$this->o_img_height);  
  54.        return $this->n_img_source; 
  55.    } 
  56.    //最终销毁资源 
  57.    function __destruct(){ 
  58.        imagedestroy($this->o_img_source); 
  59.        imagedestroy($this->n_img_source); 
  60.  
  61.    } 
  62.  

说明:因为先前没想那么多所以声明了很多私有的内部变量以便调用...程序看起来很笨拙啊......

Tags: PHP等比缩放类

分享到: