封装类的思想

所谓封装类就是把重复使用的代码,封装成方法,可以直接调用,不用再写
我们把前边的GD库添加水印GD库实现缩略图封装到类里边

  1. 打开图片是一样的,而且第一步都是打开图片,所以创建到构造函数里
  2. 输出图片,添加方法show(),把图片输出到浏览器
  3. 保存图片,添加方法save(),把图片保存到硬盘
  4. 销毁图片,因为每次执行完毕都要销毁图片,所以添加到析构函数里边
  5. 操作图片,添加缩略图方法thumb()
  6. 操作图片,添加图片水印imageMark()
  7. 操作图片,添加文字水印fontMark()

直接看代码:

    class Image{
    private $image; //内存中的图片
    private $info;//图片的基本信息

    /*
     * 打开一张图片,读取到内存中
     */
    public function __construct($src){
        //获取图片信息
        $this->info = getimagesize($src);
        //通过编号获取图片类型
        $this->info = array(
            'width' => $this->info[0],
            'height' => $this->info[1],
            'type' => image_type_to_extension($this->info['2'],false),
            'mime' => $this->info['mime']
        );
        //在内存中创建一个和我们图像类型一样的图像
        $fun = "imagecreatefrom{$this->info['type']}";
        //复制图像到内存
        $this->image = $fun($src);
    }

    /*
     * 操作图片,压缩图片
     */
    public function thumb($width,$height){
        //在内存中建立一个宽300,高200的真色彩图片
        $image_thumb = imagecreatetruecolor($width,$height);
        //核心步骤,将原图复制到新建的真色彩图片上,并且按照一定比例压缩
        imagecopyresampled($image_thumb,$this->image,0,0,0,0,$width,$height,$this->info['width'],$this->info['height']);
        //销毁原始图片
        imagedestroy($this->image);
        //把压缩图赋值给image
        $this->image = $image_thumb;
    }

    /*
     * 操作图片,添加文字水印
     */
    public function fontMark($content,$font_url,$size,$color,$local,$angle){
        //设置字体的颜色RGB和透明度 参数1 图片 参数2颜色
        $col = imagecolorallocatealpha($this->image,$color[0],$color[1],$color[2],$color[3]);
        //写入文字
        imagettftext($this->image,$size,$angle,$local['x'],$local['y'],$col,$font_url,$content);
    }

    /*
     * 操作图片,添加图片水印
     */
    public function imageMark($source,$local){
        $info2 = getimagesize($source);
        $type2 = image_type_to_extension($info2['2'],false);
        $fun2 = "imagecreatefrom{$type2}";
        $water = $fun2($source);
        imagecopy($this->image,$water,$local['x'],$local['y'],0,0,$info2[0],$info2[1]);
        imagedestroy($water);
    }

    /*
     * 在浏览器中输出图片
     */
    public function show(){
        header("Content-type:".$this->info['mime']);
        $func = "image{$this->info['type']}";
        $func($this->image);
    }

    /*
     * 把图片保存到硬盘中
     */
    public function save($newname){
        $func = "image{$this->info['type']}";
        $func($this->image,$newname.".".$this->info['type']);
    }

    /*
     * 销毁图片,用析构函数(因为每次结束都要销毁)
     */
    public function __destruct(){
        imagedestroy($this->image);
    }

}

这样就可以很方便的直接调用了,比如压缩图片

require "image.class.php";
$src = "test.jpg";
$image = new Image($src);
$image->thumb(300,150);
$image->show();

GD添加水印与压缩源代码,点击下载GD.zip

2 条评论

  1. 壮壮

    哎呦不错哦

    1. victor
      @壮壮

      没有没有☺

发表评论