图片添加水印和生成缩略图

<?php
//图片添加水印效果
class imgGD{
    protected $im;
    protected $water;
    protected $image;
    protected $img_width;        //源图片宽度
    protected $img_height;        //源图片高度
    protected $img_type;        //源类型
    protected $water_width;        //水印图片宽度
    protected $water_height;    //水印图片高度
    protected $water_type;        //水印图片类型
    protected $x;                //水印显示的x轴坐标
    protected $y;                //水印显示的y轴坐标
    protected $pct;                //水印的透明度

    //等到文件的基本信息
    public function getExt($img){
        $info = getimagesize($img);
        return $info;
    }
    
    //根据文件的类型,创建一个对应类型的图像
    public function createImage($type,$image){
        switch ($type){
            case 1:
                $img = imagecreatefromgif($image);
                break;
            case 2:
                $img = imagecreatefromjpeg($image);
                break;    
            case 3:
                $img = imagecreatefrompng($image);
                break;
            case 6:
                $img = imagecreatefromwbmp($image);
                break;
            default:
                break;
        }
        return $img;
    }


    //保存图片
    public function saveImage($type,$image,$dir){
        switch ($type){
            case 1:
                imagegif($image,$dir);
                break;
            case 2:
                imagejpeg($image,$dir);
                break;    
            case 3:
                imagepng($image,$dir);
                break;
            case 6:
                imagewbmp($image,$dir);
                break;
            default:
                break;
        }
        
    }

    //设置水印显示的位置
    //0:居中
    //1:左上角
    //2:右上角
    //3:左下角
    //4:右下角
    public function water_position($position){
        switch ($position){
            case 0:    
                $this->x = round(($this->img_width - $this->water_width)/2);
                $this->y = round(($this->img_height - $this->water_height)/2);
                break;
            case 1:    
                $this->x = 20;
                $this->y = 20;
                break;
            case 2:    
                $this->x = 20;
                $this->y = $this->img_height - $this->water_height - 20;
                break;
            case 3:    
                $this->x = $this->img_width - $this->water_width - 20;
                $this->y = 20;
                break;
            case 4:    
                $this->x = $this->img_width - $this->water_width - 20;
                $this->y = $this->img_height - $this->water_height - 20;
                break;
            default:
                $this->x = 20;
                $this->y = 20;
                break;
        
        }
    
    
    }

    //取得源图片的目录,并在该目录下新建缩略图存放的文件夹
    public function mk_dir($name){
        $path = substr($this->image,0,strripos($this->image,'/')) .'/'. $name;
        // ./small
        //exit;
        $file_name = $name . '_' .substr($this->image,(strripos($this->image,'/')+1));
        //small_1.jpg

        if(!is_dir($path)){
            if(!mkdir($path,0777,true)){
                echo '失败';
                return false;
            }
        
        }

        $path = $path . '/' . $file_name;
        
        return $path;
    
    }

    //保存small_img

    public function save_small($size,$name){
        //求缩放比例
        if($this->img_width >= $this->img_height){
            $width = $size;
            $height = ($this->img_height/$this->img_width)*$size;
        }else{    
            $width = ($this->img_width/$this->img_height)*$size;
            $height = $size;
        }

        //求坐标
        $x = ($size - $width)/2;
        $y = ($size - $height)/2;
        
        $small = imagecreatetruecolor($size,$size);
        $bg = imagecolorallocate($small,255,255,255);
        imagefill($small,0,0,$bg);

        imagecopyresampled($small,$this->im,$x,$y,0,0,$width,$height,$this->img_width,$this->img_height);
            
        //计算出源文件存放的目录的存放路径
        $small_img = $this->mk_dir($name);
        //header('content-type: image/jpeg');

        $this->saveImage($this->img_type,$small,$small_img);
        
        return $small_img;
    }

    

    //添加水印
    public function watermark($image,$water,$position=1,$pct=35){
        //水印的透明度
        $this->pct = $pct;
        //获得图片
        $this->image = $image;
        //取得源图片的基本信息
        $info = $this->getExt($this->image);
        $this->img_width = $info[0];
        $this->img_height = $info[1];
        $this->img_type = $info[2];
        
        //取得水印图片的基本信息
        $info = $this->getExt($water);
        $this->water_width = $info[0];
        $this->water_height = $info[1];
        $this->water_type = $info[2];

        //计算水印显示的位置

        $this->water_position($position);

        //分别创建一个对应类型的图像

        $this->im = $this->createImage($this->img_type,$this->image);

        $this->water = $this->createImage($this->water_type,$water);

        //把水印图片粘到源图片上去,使用imagecopymerge
        
        imagecopymerge($this->im,$this->water,$this->x,$this->y,0,0,$this->water_width,$this->water_height,$this->pct);

        //保存源图片
        
        //header('content-type: image/jpeg');
        $this->saveImage($this->img_type,$this->im,$this->image);
        
        $list = array();
        //小缩略图
        if($thumb = $this->save_small(150,'goods_thumb')){
            $list['goods_thumb'] = str_replace(ROOT,'',$thumb); 
        }
        
        //中缩略图
        if($small = $this->save_small(200,'goods_img')){
            $list['goods_img'] = str_replace(ROOT,'',$small); 
        }
        
        return $list;
        
        
    }

}

 

posted @ 2012-10-15 16:40  探索者_PHP  阅读(278)  评论(0编辑  收藏  举报