给图片添加水印

<?php
    $bg_src="./bg.jpg";
    $logo_src="./logo.png";

    //获取图片的width宽、height高、mime后缀类型
    $bg_size=getimagesize($bg_src);
    $logo_size=getimagesize($logo_src);
    
    $bg_width=$bg_size[0];
    $bg_height=$bg_size[1];
    $bg_mime=$bg_size['mime'];
    
    $logo_width=$logo_size[0];
    $logo_height=$logo_size[1];
    $logo_mime=$logo_size['mime'];
    
    $position=0;//水印相对背景图的位置;0表示位置在左上角,1表示位置在上边中间,2表示位置在右上角,3表示位置在左侧中间,4表示位置在中心,5表示位置在右侧中间,6表示位置在左下角,7表示位置在下边中间,8表示位置在右下角
    $alpha=100;//水印的透明度0~100
        
    //1.打开两张图片  
    function openimage($mime,$src){
        switch ($mime){
            case "image/jpeg":
                $img=imagecreatefromjpeg($src);
                break;
            case "image/png":
                $img=imagecreatefrompng($src);
                break;
            case "image/gif":
                $img=imagecreatefromgif($src);
                break;
            case "image/wbmp":
                $img=imagecreatefromwbmp($src);
                break;
            case "image/xbm":
                $img=imagecreatefromxbm($src);
                break;
        }
        return $img;
    }
    
    $bg=openimage($bg_mime,$bg_src);
    $logo=openimage($logo_mime,$logo_src);
    
    //2.合并两张图片
    switch ($position){
        case 0:
            $x=0;
            $y=0;
            break;
        case 1:
            $x=$bg_width/2-$logo_width/2;
            $y=0;
            break;
        case 2:
            $x=$bg_width-$logo_width;
            $y=0;
            break;
        case 3:
            $x=0;
            $y=$bg_height/2-$logo_height/2;
            break;
        case 4:
            $x=$bg_width/2-$logo_width/2;
            $y=$bg_height/2-$logo_height/2;
            break;
        case 5:
            $x=$bg_width-$logo_width;
            $y=$bg_height/2-$logo_height/2;
            break;
        case 6:
            $x=0;
            $y=$bg_height-$logo_height;
            break;
        case 7:
            $x=bg_width/2-$logo_width/2;
            $y=$bg_height-$logo_height;
            break;
        case 8:
            $x=$bg_width-$logo_width;
            $y=$bg_height-$logo_height;
            break;
    }
    
    imagecopymerge($bg,$logo,$x,$y,0,0,$logo_width,$logo_height,$alpha);

    //3.通知浏览器以图像形式展现
    header("content-type:image/png");
    
    //4.输出图像
    imagepng($bg);
    
    //5.释放资源
    imagedestroy($bg);
    imagedestroy($logo);   

?>

若要将添加水印后的图片保存下来而非仅显示在浏览器中,则须在“4.输出图像”的步骤中使用imagepng()一类函数的另一形式:imagepng($bg,'生成图片的路径名称.后缀');

    //3.通知浏览器以图像形式展现,若仅需保存无需在浏览器显示则注释这句
    header("content-type:image/png");
    
    //4.输出图像
    imagepng($bg);  //若仅需保存无需在浏览器显示则注释这句

    //若要保存图像:
    //获取底板图片的文件扩展名
    $ext=pathinfo($bg_src)['extension'];
    //生成一个随机且唯一性的文件名
    $filename=md5(uniqid(microtime(true),true)).".".$ext;
    //设置要输出的文件路径
    $filepath="./".$filename;
    switch ($ext) {
        case 'jpg':
        case 'jpeg':
        case 'jpe':
            imagejpeg($bg,$filepath);
            break;
        case 'png':
            imagepng($bg,$filepath);
            break;
        case 'gif':
            imagegif($bg,$filepath);
            break;
        case 'bmp':
        case 'wbmp':
            imagewbmp($bg,$filepath);
            break;
        case 'xbm':
            imagexbm($bg,$filepath);
            break;
    }

 

posted @ 2018-07-13 10:39  Autumn_n  阅读(407)  评论(0编辑  收藏  举报
TOP