zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

PHP 一个 完美 去除 背景 缩放 附带 gif
2023-06-13 09:15:24 时间

现在写东西都喜欢封装成类.....大家调用一下就行了..我就不说怎么调用了

复制代码代码如下:

<?php
classresize_image{
  private$o_img_width;//原图像宽度
  private$o_img_height;//原图像高度
  private$n_img_width;//新图像宽度
  private$n_img_height;//新图像高度
  private$o_img_file;//原图像文件
  private$o_img_source;//原图像资源
  private$n_img_file;//新图像资源
  private$n_img_source;//新图像资源
  private$o_to_n_per=0.5;//图像缩放比

  //初始化内部变量
  function__construct($oldfile,$newfile){
      list($width,$height)=getimagesize($oldfile);
      $this->o_img_file=$oldfile;
      $this->o_img_width=$width;
      $this->o_img_height=$height;
      $this->n_img_file=$newfile;
  }

  //等比例缩放并且解决GIF透明色为黑色背景的问题
  functionget_resize_scaling_img(){
      $this->n_img_width=$this->o_img_width*$this->o_to_n_per;
      $this->n_img_height=$this->o_img_height*$this->o_to_n_per;
      //等比例缩放图片(算法)
      if($this->n_img_width&&($this->o_img_width<$this->o_img_height))
      {
            $this->n_img_width=($this->n_img_height/$this->o_img_height)*$this->o_img_width;
      }
      else
      {
           $this->n_img_height=($this->n_img_width/$this->o_img_width)*$this->o_img_height;
      }
      $this->o_img_source=imagecreatefromgif($this->o_img_file);
      //创建一个等比例缩放大小的画布
      $this->n_img_source=imagecreatetruecolor($this->o_img_width,$this->n_img_height);

      //美化:去除黑色不透明背景
      $trans_init=imagecolortransparent($this->o_img_source);
      //寻找透明色并且判断是否在总颜色中
      if($trans_init>=0&&$trans_init<imagecolorstotal($this->o_img_source)){
          //如果在的话则搜索这个颜色的RGB色相
          $trans_index=imagecolorsforindex($this->o_img_source,$trans_init);
          //找到之后就创建这样一个颜色
          $trans_new=imagecolorallocate($this->n_img_source,$trans_index["red"],$trans_index["green"],$trans_index["blue"]);
          //然后我们用这个颜色去填充新的图像
          imagefill($this->n_img_source,0,0,$trans_new);
          //然后我们在把填充色设置为透明
          imagecolortransparent($this->n_img_source,$trans_new);
      }
      //拷贝原图像到新画板上
      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);
      return$this->n_img_source;
  }
  //最终销毁资源
  function__destruct(){
      imagedestroy($this->o_img_source);
      imagedestroy($this->n_img_source);

  }

}


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