PHP-水印封装

PHP水印文件结构:

water.php

<?php
//水印函数封装
/*
*
*@param $dstSource大图资源
*@param $srcSource小图资源
*@param $position 位置
*@param $alpha 透明度
*@param $imgType 图片类型
*@param $path 图片路径,在image文件夹下
*@param $isRandName 是否以任意名字命名
*/

function water($dstSource,$srcSource,$position=1,$alpha=20,$imgType='jpeg',$path='./image',$isRandName=true) {
    $position=mt_rand(1,9);
    //通过路径,打开大图资源
    $dst=open($dstSource);
    //通过路径,打开小图资源
    $src=open($srcSource);

    //获取图片信息,算出图片位置
    //getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组
    //大图信息
    $dstInfo=getimagesize($dstSource);
    //小图信息
    $srcInfo=getimagesize($srcSource);
    switch($position) {
        case 1:
            $x=0;
            $y=0;
            break;
        case 2:
            $x=($dstInfo[0]-$srcInfo[0])/2;
            $y=0;
            break;
        case 3:
            $x=$dstInfo[0]-$srcInfo[0];
            $y=0;
            break;
        case 4:
            $x=0;
            $y=($dstInfo[1]-$srcInfo[1])/2;
            break;
        case 5:
            $x=($dstInfo[0]-$srcInfo[0])/2;
            $y=($dstInfo[1]-$srcInfo[1])/2;
            break;
        case 6:
            $x=$dstInfo[0]-$srcInfo[0];
            $y=($dstInfo[1]-$srcInfo[1])/2;
            break;
        case 7:
            $x=0;
            $y=$dstInfo[1]-$srcInfo[1];
            break;
        case 8:
            $x=($dstInfo[0]-$srcInfo[0])/2;
            $y=$dstInfo[1]-$srcInfo[1];
            break;
        case 9:
            $x=$dstInfo[0]-$srcInfo[0];
            $y=$dstInfo[1]-$srcInfo[1];
            break;
        //如果传入的参数不属于以上范围的话,执行下面的语句
        default:
            $x=mt_rand(0,$dstInfo[0]-$srcInfo[0]);
            $y=mt_rand(0,$dstInfo[1]-$srcInfo[1]);
            break;
    }
    //开始合并
    //拷贝并合并图像的一部分
    //打开的大图资源,打开的小图资源,在大图x,在大图y的位置
    //从小图的x,y处开始,小图的宽高,透明度
    imagecopymerge($dst,$src,$x,$y,0,0,$srcInfo[0],$srcInfo[1],$alpha);
    //imagepng() 将 GD 图像流(image)以 PNG 格式输出到标准输出(通常为浏览器),
    //或者如果用 filename 给出了文件名则将其输出到该文件
    //拼接函数imagepng($image);
    $func='image'.$imgType;

    //是否随机文件名
    if($isRandName) {
        $name=uniqid().'.'.$imgType; //1.jpg  asdasswerwr.jpeg
    }else {
        //pathinfo — 返回文件路径的信息
        $pathinfo=pathinfo($dstSource);  // 由mn.jpg 得到 'mn'
        //var_dump($pathinfo['filename']);
        $name=$pathinfo['filename'].'.'.$imgType;  //'mn.jpeg'
        //var_dump($name);
    }
    //处理文件夹
    //var_dump($path);  './image'
    $path=trim($path,'/').'/'.$name;
    //var_dump($path);  './image/mn.jpeg'

    //imagepng($image);
    //将gd图片流以png的方式输出到 $path路径下
    $func($dst,$path);

    //销毁资源
    imagedestroy($dst);
    imagedestroy($src);
    return $path;
}

//封装打开函数
function open($path) {
    //测试打印$path
    //var_dump($path);
    //得到传入的大图路径和小图路径

    //判断传入的大图,小图路径是否存在
    //file_exists() 函数检查文件或目录是否存在。
    if(!file_exists($path)) {
        exit('图片不存在');
    }
    //getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组
    $info=getimagesize($path);
    //测试打印$info,结果如下
    //var_dump($info);
    /*
    array (size=6)
      0 => int 1648
      1 => int 1028
      2 => int 3
      3 => string 'width="1648" height="1028"' (length=26)
      'bits' => int 8
      'mime' => string 'image/png' (length=9)
    */

    //根据mime类型创建新图像
    switch ($info['mime']) {
        case 'image/jpeg':
        case 'image/jpg':
        case 'image/pjpg':
        //imagecreatefromjpeg()有文件或url创建一个新图像
            $res=imagecreatefromjpeg($path);
            break;
        case 'image/png':
            $res=imagecreatefrompng($path);
            break;
        case 'image/gif':
            $res=imagecreatefromgif($path);
            break;
        case 'image/wbmp':
            $res=imagecreatefromwbmp($path);
            break;
    }
    //测试打印新建的图片
    //var_dump($res); 结果-> resource(4, gd) resource(7, gd)

    //返回根据mime类型创建的新图像
    return $res;

}
//传入大图路径,小图路径
water('./mn.png','./mn.jpg');

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值