php制作缩略图

PHP制作缩略图

1、制作缩略图的函数

imagecopyresampled(dest,src,dx,dy,sx,sy,dw,dh,sw,sh)

说明:

dest 目标画布

src 原图(要缩略的图片)

dx,dy 目标画布上的一个点

sx,sy 原图上的一个点

dw,dh 画布的 宽高

sw,sh  原图的宽高

src原图上以sx,sy为左上角,取宽为sw,高为sh的区域,放在dest画布上,以dx,dy为左上角,宽为dw,高为dh的区域。

2、制作的原理

生成缩略图,关键的是如何计算缩放比率

1、画布的高/画布的宽>原图的高/原图的宽

也就是下图这种情况: 缩放比率 =  新图宽度 / 原图宽度 

2、原图的高/原图的宽>画布的高/画布的宽

也就是下图这种情况:缩放比率 =  新图高度 / 原图高度 

3、具体代码

function thumb($file,$dw,$dh,$path){//这四个参数分别是1、要缩略的图片,2、画布的宽(也就是你要缩略的宽)3、画布的高(也就是你要缩略的高),4、保存路径)
            //获取用户名图
            $srcImg=$this->getImg($file);//调用下面那个函数,实现根据图片类型来创建不同的图片画布
            //获取原图的宽高
            $infoSrc=getimagesize($file);//这个getimagesize()是php里面的系统函数用来获取图片的具体信息的
            $sw=$infoSrc[0];//获取要缩略图片的宽
            $sh=$infoSrc[1];。。获取要缩略的图片的高
            //创建缩略图画布
            $destImg=imagecreatetruecolor($dw, $dh);
            //为缩略图填充背景色
            $bg=imagecolorallocate($destImg,250,250,250);
            imagefill($destImg,0,0,$bg);
            //计算例缩放的尺寸
            if($dh/$dw>$sh/$sw){
                $fw=$dw;
                $fh=$sh/$sw*$fw;
            }else{
                $fh=$dh;
                $fw=$fh*$sw/$sh;
            }
            //居中放置
            $dx=($dw-$fw)/2;
            $dy=($dh-$fh)/2;
            //创建缩略图
            imagecopyresampled($destImg, $srcImg, 0, 0, 0, 0 ,$fw, $fh,$sw, $sh);
            $baseName='thumb_'.basename($file);//给缩略的图片命名,basename()是系统内置函数用来获取后缀名的
            $savePath=$path.'/'.$baseName;//设置缩略图片保存路径
           imagejpeg($destImg,$savePath)//把缩略图存放到上一步设置的保存路径里

        }
        function getImg($file){//这是以一个动态创建图片画布的函数(根据具体的图片类型创相应类型的画布)
            $info=getimagesize($file);
            $fn=$info['mime'];//获得图片类型;
            switch($fn){
                 case 'image/jpeg'://如果类型是imag/jpeg就创建jpeg类型的画布
                $img=imagecreatefromjpeg($file);
                break;
            case 'image/gif':
                $img=imagecreatefromgif($file);//如果类型是gif就创建gif类型的画布
            case 'image/png':
                $img=imagecreatefrompng($file);//如果类型是png就创建png类型的画布
                break;

            }
            return $img;//返回画布类型
        }

 

posted @ 2018-11-20 21:08  yunhenX  阅读(2539)  评论(0编辑  收藏  举报