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 οnclick="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>
發佈了31 篇原創文章 · 獲贊 36 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章