zoukankan      html  css  js  c++  java
  • 封装图片处理类(缩略图)

    <?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['config']['admin_goods_thumb']['width'] : $width;
                $this->thumb_height = ($height == 0) ? $GLOBALS['config']['admin_goods_thumb']['height'] : $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 = '原图不存在!';
                    return false;
                }

                //打开原图资源
                //获取能够使用的后缀
                $ext = $this->getFunctionName($src);    //gif

                //拼凑函数名
                $open = 'imagecreatefrom' . $ext;        //imagecreatefromgif
                $save = 'image' . $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 = 'thumb_' . basename($src);
                    $save($dst_img,$path . '/' . $thumb_name);
                    //保存成功
                    return $thumb_name;
                }else{
                    //采样失败
                    $this->thumb_error = '缩略图采样失败!';
                    return false;
                }
            }

            /*
             * 获取文件要调用的函数名
             * @param1 string $file,文件名字
             * @return 通过文件后缀名得到的函数字符串
            */
            private function getFunctionName($file){
                //得到文件的后缀
                $file_info = pathinfo($file);    
                $ext = $file_info['extension'];            //后缀:gif,png,jpg,jpeg,pjpeg
                //imagecreatefromgif,imagecreatefromjpeg,imagecreatefrompng

                //定义一个数组保存函数名
                $func = array(
                    'gif' => 'gif',    
                    'png' => 'png',    
                    'jpg' => 'jpeg',    
                    'jpeg' => 'jpeg',    
                    'pjpeg' => 'jpeg'
                );

                //返回值
                return $func[$ext];
            }

        }

  • 相关阅读:
    就为了一个原子操作,其他CPU核心罢工了
    浅谈JVM和垃圾回收
    简单了解一下K8S,并搭建自己的集群
    WebAssembly完全入门——了解wasm的前世今身
    【简单了解系列】从基础的使用来深挖HashMap
    【俗话说】换个角度理解TCP的三次握手和四次挥手
    两分钟让你明白Go中如何继承
    游戏服务器和Web服务器的区别
    Go中使用seed得到相同随机数的问题
    从web到游戏,走出舒适区
  • 原文地址:https://www.cnblogs.com/shaohuixia/p/5427212.html
Copyright © 2011-2022 走看看