Home > Backend Development > PHP Tutorial > Complete example of PHP encapsulated picture (thumbnail) processing class

Complete example of PHP encapsulated picture (thumbnail) processing class

黄舟
Release: 2023-03-06 07:48:01
Original
1556 people have browsed it

The example of this article describes the image (thumbnail) processing class encapsulated by PHP. Share it with everyone for your reference, the details are as follows:

<?php
//图片处理工具类
class Image{
    //属性
    private $thumb_width; //缩略图的宽
    private $thumb_height;
    //错误属性
    public $thumb_error;
    //构造方法
    public function __construct($width = 0,$height = 0){
      $this->thumb_width = ($width == 0) ? $GLOBALS[&#39;config&#39;][&#39;admin_goods_thumb&#39;][&#39;width&#39;] : $width;
      $this->thumb_height = ($height == 0) ? $GLOBALS[&#39;config&#39;][&#39;admin_goods_thumb&#39;][&#39;height&#39;] : $height;
    }
    /*
     * 制作缩略图
     * @param1 string $src,原图路径,/uploads/20150122101010abcdef.gif
     * @param2 string $path,缩略图保存路径/uploads/thumb_20150122101010abcdef.gif
     * @return 缩略图的名字
    */
    public function makeThumb($src,$path){
      //判断原图是否存在
      if(!file_exists($src)){
        $this->thumb_error = &#39;原图不存在!&#39;;
        return false;
      }
      //打开原图资源
      //获取能够使用的后缀
      $ext = $this->getFunctionName($src); //gif
      //拼凑函数名
      $open = &#39;imagecreatefrom&#39; . $ext;    //imagecreatefromgif
      $save = &#39;image&#39; . $ext;          //imagegif
      //如果不清楚;echo $open,$save;exit;
      //可变函数打开原图资源
      $src_img = $open($src); //利用可变函数打开图片资源
      //imagecreatefromgif($src)
      //缩略图资源
      $dst_img = imagecreatetruecolor($this->thumb_width,$this->thumb_height);
      //背景色填充白色
      $dst_bg_color = imagecolorallocate($dst_img,255,255,255);
      imagefill($dst_img,0,0,$dst_bg_color);
      //宽高比确定宽高
      $dst_size = $this->thumb_width / $this->thumb_height;
      //获取原图数据
      $file_info = getimagesize($src);
      $src_size = $file_info[0]/$file_info[1];
      //求出缩略图宽和高
      if($src_size > $dst_size){
        //原图宽高比大于缩略图
        $width = $this->thumb_width;
        $height = round($width / $src_size);
      }else{
        $height = $this->thumb_height;
        $width = round($height * $src_size);
      }
      //求出缩略图起始位置
      $dst_x = round($this->thumb_width - $width)/2;
      $dst_y = round($this->thumb_height - $height)/2;
      //制作缩略图
      if(imagecopyresampled($dst_img,$src_img,$dst_x,$dst_y,0,0,$width,$height,$file_info[0],$file_info[1])){
        //采样成功:保存,将文件保存到对应的路径下
        $thumb_name = &#39;thumb_&#39; . basename($src);
        $save($dst_img,$path . &#39;/&#39; . $thumb_name);
        //保存成功
        return $thumb_name;
      }else{
        //采样失败
        $this->thumb_error = &#39;缩略图采样失败!&#39;;
        return false;
      }
    }
    /*
     * 获取文件要调用的函数名
     * @param1 string $file,文件名字
     * @return 通过文件后缀名得到的函数字符串
    */
    private function getFunctionName($file){
      //得到文件的后缀
      $file_info = pathinfo($file);
      $ext = $file_info[&#39;extension&#39;]; //后缀:gif,png,jpg,jpeg,pjpeg
      //imagecreatefromgif,imagecreatefromjpeg,imagecreatefrompng
      //定义一个数组保存函数名
      $func = array(
        &#39;gif&#39; => &#39;gif&#39;,
        &#39;png&#39; => &#39;png&#39;,
        &#39;jpg&#39; => &#39;jpeg&#39;,
        &#39;jpeg&#39; => &#39;jpeg&#39;,
        &#39;pjpeg&#39; => &#39;jpeg&#39;
      );
      //返回值
      return $func[$ext];
    }
}
Copy after login


The above is the content of the complete example of the PHP encapsulated image (thumbnail) processing class, more For more related content, please pay attention to the PHP Chinese website (www.php.cn)!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template