php 图片批量加水印

本文实例讲述了PHP图片加水印实现方法。分享给大家供大家参考,代码不是很完善,欢迎大家多多指教!代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
    <title>图片批量加水印</title>
    <script language="javascript" type="text/javascript">
        function AddInput(){
            var input=document.createElement('input');//创建一个input节点
            var br=document.createElement('br');//创建一个br节点
            input.setAttribute('type','file');// 设置input节点type属性为file
            input.setAttribute('name','files[]');//设置input节点 name属性为files[],以 数组的方式传递给服务器端
            document.form1.appendChild(br);//把节点添加到 form1表单中
            document.form1.appendChild(input);
        }
    </script>
    </head>

    <?php

    /**
    * 为图片加水印
    * @param string $desImg 目标图片 参数格式为 ./images/pic.jpg
    * @param string $waterImg 水印图片 参数格式同上,水印图片为 png格式,背景透明
    * @param int positon 水印地位 1:顶部居左 2:顶部居右 3:居中 4 :底部居左 5:底部居右
    * @param bool $saveas 能否另存为,默许值false,默示笼盖原图
    * @param int $alpha 水印图片的不通明度
    * @return string $savepath 新图片的途径
    * **/
    function watermark($desImg,$waterImg,$positon = 1,$saveas = false,$alpha = 80){
        //获取目图片的根基信息
        $temp = pathinfo($desImg);
        $name = $temp["basename"];//文件名
        $path = $temp["dirname"];//文件地点的文件夹
        $extension = $temp["extension"];//文件扩展名

        if($saveas){
            //需要另存为
            $name = rtrim($name,".$extension")."_2.";//从头命名
            $savepath = $path."/".$name.$extension;
        }else{
            //不需要另存为则笼盖原图
            $savepath=$path."/".$name;
        }

        $info = getImageInfo($desImg);//获取目标图片的信息
        $info2 = getImageInfo($waterImg);//获取水印图片的信息

        $desImg = create($desImg);//从原图创立
        $waterImg = create($waterImg);//从水印图片创立

        //地位1:顶部居左
        if($positon == 1){
            $x = 0;
            $y = 0;
        }

        //地位2:顶部居右
        if($positon == 2){
            $x = $info[0] - $info2[0];
            $y = 0;
        }

        //地位3:居中
        if($positon == 3){
            $x = ($info[0] - $info2[0]) / 2;
            $y = ($info[1] - $info2[1]) / 2;
        }
        //地位4:底部居左
        if($positon == 4){
            $x = 0;
            $y = $info[1] - $info2[1];
        }
        //地位5:底部居右
        if($positon == 5){
            $x = $info[0]-$info2[0];
            $y = $info[1]-$info2[1];
        }

        imagecopymerge($desImg,$waterImg,$x,$y,0,0,$info2[0],$info2[1],$alpha);
        imagejpeg($desImg,$savepath);
        imagedestroy($desImg);
        imagedestroy($waterImg);
        return $savepath;
    }

    /**
    * 获取图片的信息,width,height,image/type
    * @param string $src 图片途径
    * @return 数组
    * **/
    function getImageInfo($src){
        return getimagesize($src);
    }

    /**
    * 创立图片,前往本钱范例
    * @param string $src 图片途径
    * @return resource $im 前往本钱范例
    * **/
    function create($src){
        $info = getImageInfo($src);
        switch($info[2]){
            case 1:
            $im=imagecreatefromgif($src);
            break;
            case 2:
            $im=imagecreatefromjpeg($src);
            break;
            case 3:
            $im=imagecreatefrompng($src);
            break;
        }
        return $im;
    }


    if(isset($_POST['sub']) && $_POST['sub']=="www"){

        $waterimg = "water.png"; // 水印图片
        $ftype = array('image/jpg','image/jpeg','imgage/png','image/pjpeg','image/gif');//允许上传的文件类型
        $files = $_FILES['files'];

        $fnum = count($files['name']); //取得上传文件个数

        if($fnum > 0){
            echo '<div style="width: 600px;margin: 0 auto;">';
            for($i = 0;$i < $fnum;$i++){
                $n = $i + 1;
                if($files['name'][$i] != '' && is_uploaded_file($files['tmp_name'][$i])){
                    //判断文件是否是允许的类型
                    if(in_array($files['type'][$i],$ftype)){
                        $fname[$i] = 'upfile/'.rand(0,10000).time().substr($files['name'] [$i],strrpos($files['name'][$i],'.'));//自动命名
                        move_uploaded_file($files['tmp_name'][$i],$fname[$i]);
                        echo '<br/>'.$n.'. 文件上传成功!('.$fname[$i].')';

                        // 生成水印图片
                        watermark($fname[$i],$waterimg); 
                    }else{
                        echo '<br/>'.$n.'. 不允许的文件类型!';
                        exit;
                    }
                }else{
                    echo '<br/>'.$n.'. 该文件不存在!';
                }  
            }
            echo '</div>';

        }

    }

    ?>

    <body>
        <div style="width: 600px;margin: 0 auto;">
            <h2>图片批量加水印</h2>
            <hr>
            <a href="javascript:;" onclick="AddInput()">再上传一张</a>
            <!-- <button onclick="AddInput()" type="button" style="color: #FFF;background-color: red;border: 0;padding: 5px;">再上传一张</button> --><br/><br/>
            <form name="form1" method="post" action="" enctype="multipart/form-data" >
                <input type="file" name="files[]" id="files[]" />
                <input type="submit" name="sub" value="上传"/>
                <input name="sub" type="hidden" id="sub" value="www" />
            </form>
        </div>
    </body>

</html>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值