欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php 缩略图类(附调用示例)

程序员文章站 2022-03-15 17:57:56
...
本文介绍下,php实现的一个缩略图类,支持加载图片文件与加载图片字符串,按比例拉伸等,代码后面有调用示例供参考。

分享个php缩略图类,可以实现如下的功能:

1,支持加载图片文件和加载图片字符串 2,可以将缩略图输出到浏览器和保持缩略图文件 3,支持gif,png,jpeg类型的缩略 4,可以设定是否按比例来拉伸

代码如下:

maxWidth = $maxWidth;
                $this->maxHeight = $maxHeight;
                $this->scale = $scale;
                $this->inflate = $inflate;
                $this->types = array(
                    'image/jpeg',
                    'image/png',
                    'image/gif'
                );
                //加载MIME类型图像的函数名称
                $this->imgLoaders = array(
                    'image/jpeg'        =>      'imagecreatefromjpeg',
                    'image/png'         =>      'imagecreatefrompng',
                    'image/gif'         =>      'imagecreatefromgif'
                );
                //储存创建MIME类型图片的函数名称
                $this->imgCreators = array(
                    'image/jpeg'        =>      'imagejpeg',
                    'image/png'         =>      'imagepng',
                    'image/gif'         =>      'imagegif'
                );           
        }
        /**
         * 文件方式加载图片
         * @param       string  $image 源图片
         * @return      bool    
         */
        public function loadFile($image){
                if(!$dims = @getimagesize($image)){
                        trigger_error("源图片不存在");
                }
                if(in_array($dims['mime'], $this->types)){
                        $loader = $this->imgLoaders[$dims['mime']];
                        $this->source = $loader($image);
                        $this->sourceWidth = $dims[0];
                        $this->sourceHeight = $dims[1];
                        $this->sourceMime = $dims['mime'];
                        $this->initThumb();
                        return TRUE;
                }else{
                        trigger_error('不支持'.$dims['mime']."图片类型");
                }
        }
        /**
         * 字符串方式加载图片
         * @param       string $image  字符串
         * @param       string $mime    图片类型
         * @return type 
         */
        public function loadData($image,$mime){
                if(in_array($mime, $this->types)){
                        if($this->source = @imagecreatefromstring($image)){
                                $this->sourceWidth = imagesx($this->source);
                                $this->sourceHeight = imagesy($this->source);
                                $this->sourceMime = $mime;
                                $this->initThumb();
                                return TRUE;
                        }else{
                                trigger_error("不能从字符串加载图片");
                        }
                }else{
                        trigger_error("不支持".$mime."图片格式");
                }
        }
        /**
         * 生成缩略图
         * @param       string  $file   文件名。如果不为空则储存为文件,否则直接输出到浏览器
         */
        public function buildThumb($file = null){
                $creator = $this->imgCreators[$this->sourceMime];
                if(isset($file)){
                        return $creator($this->thumb,$file);
                }else{
                        return $creator($this->thumb);
                }
        }
        /**
         * 处理缩放
         */
        public function initThumb(){
                if($this->scale){
                        if($this->sourceWidth > $this->sourceHeight){
                                $this->thumbWidth = $this->maxWidth;
                                $this->thumbHeight = floor($this->sourceHeight*($this->maxWidth/$this->sourceWidth));
                        }elseif($this->sourceWidth sourceHeight){
                                $this->thumbHeight = $this->maxHeight;
                                $this->thumbWidth = floor($this->sourceWidth*($this->maxHeight/$this->sourceHeight));
                        }else{
                                $this->thumbWidth = $this->maxWidth;
                                $this->thumbHeight = $this->maxHeight;
                        }
                }
                $this->thumb = imagecreatetruecolor($this->thumbWidth, $this->thumbHeight);
                
                if($this->sourceWidth maxWidth && $this->sourceHeight maxHeight && $this->inflate == FALSE){
                        $this->thumb = $this->source;
                }else{
                        imagecopyresampled($this->thumb, $this->source, 0, 0, 0, 0, $this->thumbWidth, $this->thumbHeight, 
$this->sourceWidth, $this->sourceHeight);
                }
        }
        
        public function getMine(){
                return $this->sourceMime;
        }
        
        public function getThumbWidth(){
                return $this->thumbWidth;
        }
        
        public function getThumbHeight(){
                return $this->thumbHeight;
        }

}

/**
 * 缩略图类调用示例(文件)
 */
$thumb = new Thumbnail(200, 200);
$thumb->loadFile('wap.gif');
header('Content-Type:'.$thumb->getMine());
$thumb->buildThumb();
/**
 * 缩略图类调用示例(字符串)
 */
$thumb = new Thumbnail(200, 200);
$image = file_get_contents('wap.gif');
$thumb->loadData($image, 'image/jpeg');
$thumb->buildThumb('wap_thumb.gif');
?>