天天看点

PHP图片加水印、压缩图片

做个笔记

<?php

/**
 * 该类用于给图片加文字水印,图片水印,压缩图片
 */
class Image
{
    private $image;

    private $info;

    //将图片保存到缓存中
    //构造函数
    public function __construct($src)
    {
        //获取图片信息
        $info = getimagesize($src);
        $this->info = array(
            'width' => $info[0],
            'height' => $info[1],
            'type' => image_type_to_extension($info[2], false),
            'mime' => $info['mime']
        );
        //在内存中创建一个和我们图像类型一样的图像
        $fun = "imagecreatefrom{$this->info['type']}";
        //把图片复制到我们的内存中
        $this->image = $fun($src);
    }

    //析构函数
    public function __destruct()
    {
        imagedestroy($this->image);
    }

    //图片加图片水印
    public function watermark($source, $local, $alpha)
    {
        //获取水印图片的基本信息
        $info2 = getimagesize($source);
        $type2 = image_type_to_extension($info2[2], false);
        $fun2 = "imagecreatefrom{$type2}";
        $water = $fun2($source);
        //合并图片
        imagecopymerge($this->image, $water, $local['x'], $local['y'], 0, 0, $info2[0], $info2[1], $alpha);
        //销毁水印图片
        imagedestroy($water);
    }

    //给图片加文字水印
    public function fontmark($content, $font_url, $size, $color, $local, $angle)
    {
        //设置字体的颜色,透明度
        $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 thumb($width, $height)
    {
        $image_thumb = imagecreatetruecolor($width, $height);
        //将原图复制到新建的真色彩图片上,并按照一定比例压缩
        imagecopyresampled($image_thumb, $this->image,
            0, 0, 0, 0,
            300, 300, $this->info['width'], $this->info['height']);
        imagedestroy($this->image);
        $this->image = $image_thumb;
    }

    //输出图片
    public function outPut()
    {
        header("Content-type:" . $this->info['mime']);
        $funs = "image{$this->info['type']}";
        $funs($this->image);
    }

    //保存图片
    public function save($name)
    {
        $funs = "image{$this->info['type']}";
        $funs($this->image, $name . '.' . $this->info['type']);
    }
}

?>