php生成简单水印

1.文字水印

/**
 * 文字水印函数
 * @param string $filename 图片地址
 * @param string $text   文字文案
 * @param int $position  水印位置(1左上角,2左下角,3中间)
 * @param int $red   红色颜色比重
 * @param int $green 绿色颜色比重
 * @param int $blue  蓝色颜色比重
 * @param int $alpha 透明度
 * @param string $savePath    新图片保存位置
 * @param bool $isDelSrc 是否删除原文件
 */
function waterMarkText($fileName = '', $text = '', $position = 1, $red = 255, $green = 0, $blue = 0, $alpha = 60, $savePath = '', $isDelSrc = false)
{
    //源图片信息
    if (!is_file($fileName)) {
        exit('未找到文件');
    }
    @$fileInfo = getimagesize($fileName);
    if (!$fileInfo) {
        exit( '不是真实图片');
    }
    if(!in_array($position,[1,2,3])){
        exit('水印位置选择有误');
    }

    list($srcw,$srch)  = $fileInfo;//图片尺寸
    $mime = $fileInfo['mime'];//图片类型 类似image/png

    $createFun = str_replace('/','createfrom',$mime);//用变量创建替换函数,增加扩展性
    $outFun = str_replace('/',null,$mime);//用变量创建替换函数,增加扩展性

    $image = $createFun($fileName);
    $color = imagecolorallocatealpha($image,$red,$green,$blue,$alpha);

    switch ($position) {
        case $position == 1://左上角
            $x = 0;
            $y = 0;
            break;
        case $position == 2://左下角
            $x = 0;
            $y = $srch - 20;
            break;
        case $position == 3://中间位置(大概的粗略位置)
            $x = $srcw/2 - 20;
            $y = $srch/2 - 20;
            break;
    }

    imagestring($image,5,$x,$y,$text,$color);//写水印操作

    header("Content-type: $mime");//用动态变量替换
    $outFun($image);//函数用动态变量替换 imagepng(),输出到浏览器

    if($savePath && !empty($savePath)){
        if(!file_exists($savePath)){
            mkdir($savePath,0777,true);
        }
        $outFun($image,$savePath.'/'.'watermarktext_'.substr(md5(uniqid(microtime(true),true)),0,5).basename($fileName));//函数用动态变量替换 imagepng(),保存进文件
    }

    if($isDelSrc){//是否删除原文件
        @unlink($fileName);
    }

    imagedestroy($image);
}

waterMarkText('../image/0.jpeg','dog.com',0,255,0,0,50,'wm',false);

2.图片水印

<?php
/**
 * 图片水印的封装
 * User: sxt
 * @param string $dstName 原图片地址
 * @param string $srcName 水印图片地址
 * @param int $position 水印位置(1:左上角 2:左下角 3:正中间位置 4:右上角 5:右下角)
 * @param int $pct 透明度(0-100)
 * @param string $savePath 保存路径
 * @param bool $isDelSrc 是否删除原文件
 */
function waterMarkImage($dstName = '', $srcName= '', $position = 1, $pct = 60, $savePath = '', $isDelSrc = false)
{
    //源图片信息
    if (!is_file($dstName)) {
        exit('未找到源图片文件');
    }
    @$dstInfo = getimagesize($dstName);
    if (!$dstInfo) {
        exit( '源图片文件不是真实图片');
    }

    //水印图片信息
    if (!is_file($srcName)) {
        exit('未找到水印图片文件');
    }
    @$srcInfo = getimagesize($srcName);
    if (!$srcInfo) {
        exit( '水印图片文件不是真实图片');
    }

    if(!in_array($position,[1,2,3,4,5])){
        exit('水印位置选择有误');
    }

    list($dstw,$dsth)  = $dstInfo;//原图片尺寸
    list($srcw,$srch)  = $srcInfo;//水印图片尺寸
    if ($srcw > $dstw || $srch > $dsth) {
        exit('水印图片尺寸大于原图片');
    }
    $dstMime = $dstInfo['mime'];//原图片类型 类似image/png
    $srcMime = $srcInfo['mime'];//logo图片类型 类似image/png

    $createFun = str_replace('/','createfrom',$dstMime );
    $createSrcFun = str_replace('/','createfrom',$srcMime );
    $outFun = str_replace('/',null,$dstMime);

    $dstImage = $createFun($dstName);
    $srcImage = $createSrcFun($srcName);

    switch ($position) {
        case $position == 1://左上角
            $x = 0;
            $y = 0;
            break;
        case $position == 2://左下角
            $x = 0;
            $y = $dsth - $srch;
            break;
        case $position == 3://正中间位置
            $x = ($dstw - $srcw) / 2;
            $y = ($dsth - $srch) / 2;
            break;
        case $position == 4://右上角
            $x = $dstw - $srcw;
            $y = 0;
            break;
        case $position == 5://右下角
            $x = $dstw - $srcw;
            $y = $dsth - $srch;
            break;
        default:
            $x = 0;
            $y = 0;
    }

    imagecopymerge($dstImage,$srcImage,$x,$y,0,0,$srcw,$srch,$pct);//写水印操作

    header("Content-type: $dstMime");//用动态变量替换
    $outFun($dstImage);//函数用动态变量替换 imagepng(),输出到浏览器

    if($savePath && !empty($savePath)){
        if(!file_exists($savePath)){
            mkdir($savePath,0777,true);
        }
        $outFun($dstImage,$savePath.'/'.'watermarkimg_'.substr(md5(uniqid(microtime(true),true)),0,5).basename($dstName));//函数用动态变量替换 imagepng(),保存进文件
    }

    if($isDelSrc){//是否删除原文件
        @unlink($dstName);
        @unlink($srcName);
    }

    imagedestroy($dstImage);
    imagedestroy($srcImage);
}

//测试
waterMarkImage('../image/0.jpeg','../image/shear.png',5,70,'imgmark');

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值