<?php
/**
 * Created by PhpStorm.
 * User: Abo
 * Date: 2016/1/6 0006
 * Time: 下午 3:37
 */
class ImageTool{
    private $info;
    private $image;

    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 getImage(){
        return $this->image;
    }

    public function getInfo(){
        return $this->info;
    }

    /**
     * 图片压缩
     * @param $width
     * @param $height
     */
    public function thumb($width,$height){
        $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);
        $this->image=$image_thumb;
    }

    /**
     * 字体水印(默认左下角)
     * @param $fontfile 字体文件consolaz.ttf
     * @param $text 水印内容
     */
    public function fontMark($fontfile,$text){
        //红绿蓝=白+50透明度字体
        $col=imagecolorallocatealpha($this->image, 255, 255, 255, 50);  
        //图片字体合成-参数:图像,字体大小,偏转角度,横向偏移,纵向偏移,颜色,字体文件,内容
        imagettftext($this->image, 50, 0, 40, $this->info['height']-50, $col, $fontfile, $text);

    }

    /**
     * 图片水印
     * @param $water 水印图片
     * @param $waterInfo 水印图片信息
     */
    public function imageMark($water,$waterInfo){
        imagecopymerge($this->image,$water,20,30,0,0,$waterInfo['width'],$waterInfo['height'],20);
        /*图片合成-参数:目标图片,水印图片,横向偏移,纵向偏移,
         *水印图片x处开始复制,水印图片的y处开始复制,
         *水印图片x处结束复制,水印图片y处结束复制,水印图片的透明度。
         */
        imagedestroy($water);
    }

    public function showInHtml(){
        header("content-type:".$this->info['mime']);
        $funs="image{$this->info['type']}";
        $funs($this->image);
    }

    /**
     * 保存图片
     * @param $newName 保存文件名
     */
    public function saveImage($newName){
        $funs="image{$this->info['type']}";
        $funs($this->image,"$newName.".$this->info['type']);//保存图片
    }

    public function __destruct(){
        imagedestroy($this->image);
    }
}