php 水印生成图片压缩

<?php
class Image
{
    /**
     *  质量大小
     */
    public  $size = 70;

    /**
     *  图片加水印
     */
    function imageMark($srcImg, $waterImg, $savepath=null, $savename=null, $positon=5, $alpha=100)
    {
        $temp = pathinfo($srcImg);
        $name = $temp['basename'];
        $path = $temp['dirname'];
        $exte = $temp['extension'];
        $savename = $savename ? $savename : $name;
        $savepath = $savepath ? $savepath : $path;
        $savefile = $savepath .'/'. $savename;
        $srcinfo = @getimagesize($srcImg);

        if (!$srcinfo) {
            throw new Exception("原文件不存在!");
        }
        $waterinfo = @getimagesize($waterImg);

        if (!$waterinfo)
        {
            throw new Exception("水印图片不存在!");
        }
        $srcImgObj = $this->image_create_from_ext($srcImg);
        if (!$srcImgObj) {
            return -3;  //原文件图像对象建立失败
        }
        $waterImgObj = $this->image_create_from_ext($waterImg);
        if (!$waterImgObj)
        {
            throw new Exception("水印文件图像对象建立失败!");
        }
        switch ($positon) {
            //1顶部居左
            case 1: $x=$y=0; break;
            //2顶部居右
            case 2: $x = $srcinfo[0]-$waterinfo[0]; $y = 0; break;
            //3居中
            case 3: $x = ($srcinfo[0]-$waterinfo[0])/2; $y = ($srcinfo[1]-$waterinfo[1])/2; break;
            //4底部居左
            case 4: $x = 0; $y = $srcinfo[1]-$waterinfo[1]; break;
            //5底部居右
            case 5: $x = $srcinfo[0]-$waterinfo[0]; $y = $srcinfo[1]-$waterinfo[1]; break;
            default: $x=$y=0;
        }
        imagecopymerge($srcImgObj, $waterImgObj, $x, $y, 0, 0, $waterinfo[0], $waterinfo[1], $alpha);
        switch ($srcinfo[2])
        {
            case 1: imagegif($srcImgObj, $savefile); break;
            case 2: imagejpeg($srcImgObj, $savefile); break;
            case 3: imagepng($srcImgObj, $savefile); break;
            default:throw new Exception("保存失败!"); break;
        }
        imagedestroy($srcImgObj);
        imagedestroy($waterImgObj);
        return $savefile;
    }

    function image_create_from_ext( $imgfile )
    {
        $info = getimagesize( $imgfile );
        $im = null;
        switch ($info[2])
        {
            case 1: $im=imagecreatefromgif( $imgfile ); break;
            case 2: $im=imagecreatefromjpeg( $imgfile ); break;
            case 3: $im=imagecreatefrompng( $imgfile ); break;
            default:throw new Exception("保存失败!"); break;
        }
        return $im;
    }


    /**
     *  $imgsrc 图片路径
     *  $imgdst 生成后的路径
     *  生成缩略图
     */
    function thumb($imgsrc,$w=null,$h=null,$imgdst=null)
    {
        $imgdst = $imgdst?$imgdst:$imgsrc;
        //给变量赋值
        list($width,$height,$type) = getimagesize($imgsrc);
        $new_width =  $width>$w?$w:$width;
        $new_height = $height>$h?$h:$height;
        switch($type)
        {
            case 1:
                $giftype=check_gifcartoon($imgsrc);
                if($giftype){
                    header('Content-Type:image/gif');
                    $image_wp=imagecreatetruecolor($new_width, $new_height);
                    $image = imagecreatefromgif($imgsrc);
                    imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
                    imagejpeg($image_wp, $imgdst,$this->size);
                    imagedestroy($image_wp);
                }
                break;
            case 2:
                header('Content-Type:image/jpeg');
                $image_wp=imagecreatetruecolor($new_width, $new_height);
                $image = imagecreatefromjpeg($imgsrc);
                imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
                imagejpeg($image_wp, $imgdst,$this->size);
                imagedestroy($image_wp);
                break;
            case 3:
                header('Content-Type:image/png');
                $image_wp=imagecreatetruecolor($new_width, $new_height);
                $image = imagecreatefrompng($imgsrc);
                imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
                imagejpeg($image_wp, $imgdst,$this->size);
                imagedestroy($image_wp);
                break;
            default:
                throw new Exception("保存失败!");
                break;
        }
    }

    function check_gifcartoon($image_file)
    {
        $fp = fopen($image_file,'rb');
        $image_head = fread($fp,1024);
        fclose($fp);
        return preg_match("/".chr(0x21).chr(0xff).chr(0x0b).'NETSCAPE2.0'."/",$image_head)?false:true;
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值