zoukankan      html  css  js  c++  java
  • php 图片水印+文字水印函数,但是不能设置透明

    <?php /* 
    * 功能:PHP图片水印 (水印支持图片或文字) 
    * 参数: 
    *      $groundImage    背景图片,即需要加水印的图片,暂只支持GIF,JPG,PNG格式; 
    *      $waterPos        水印位置,有10种状态,0为随机位置; 
    *                        1为顶端居左,2为顶端居中,3为顶端居右; 
    *                        4为中部居左,5为中部居中,6为中部居右; 
    *                        7为底端居左,8为底端居中,9为底端居右; 
    *      $waterImage        图片水印,即作为水印的图片,暂只支持GIF,JPG,PNG格式; 
    *      $waterText        文字水印,即把文字作为为水印,支持ASCII码,不支持中文; 
    *      $textFont        文字大小,值为1、2、3、4或5,默认为5; 
    *      $textColor        文字颜色,值为十六进制颜色值,默认为#FF0000(红色); 

    * 注意:Support GD 2.0,Support FreeType、GIF Read、GIF Create、JPG 、PNG 
    *      $waterImage 和 $waterText 最好不要同时使用,选其中之一即可,优先使用 $waterImage。 
    *      当$waterImage有效时,参数$waterString、$stringFont、$stringColor均不生效。 
    *      加水印后的图片的文件名和 $groundImage 一样。 
    * 作者:longware @ 2004-11-3 14:15:13 
    */
    function imageWaterMark ( $groundImage , $waterPos = 0 , $waterImage = "" , $waterText = "" , $textFont = 5 , $textColor = "#FF0000" ){ 
         
    $isWaterImage = FALSE ; 
         
    $formatMsg = "暂不支持该文件格式,请用图片处理软件将图片转换为GIF、JPG、PNG格式。" ;

         
    //读取水印文件 
         if(!empty$waterImage ) && file_exists ( $waterImage )) 
        { 
             
    $isWaterImage = TRUE ; 
             
    $water_info = getimagesize ( $waterImage ); 
             
    $water_w     = $water_info [ 0 ]; //取得水印图片的宽 
             $water_h     = $water_info [ 1 ]; //取得水印图片的高

             
    switch$water_info [ 2 ]) //取得水印图片的格式 
             { 
                
    case 1 : $water_im = imagecreatefromgif ( $waterImage );break
                
    case 2 : $water_im = imagecreatefromjpeg ( $waterImage );break
                
    case 3 : $water_im = imagecreatefrompng ( $waterImage );break
                
    default:die$formatMsg ); 
            } 
        }

         
    //读取背景图片 
         if(!empty$groundImage ) && file_exists ( $groundImage )) 
        { 
             
    $ground_info = getimagesize ( $groundImage ); 
             
    $ground_w     = $ground_info [ 0 ]; //取得背景图片的宽 
             $ground_h     = $ground_info [ 1 ]; //取得背景图片的高

             
    switch$ground_info [ 2 ]) //取得背景图片的格式 
             { 
                
    case 1 : $ground_im = imagecreatefromgif ( $groundImage );break
                
    case 2 : $ground_im = imagecreatefromjpeg ( $groundImage );break
                
    case 3 : $ground_im = imagecreatefrompng ( $groundImage );break
                
    default:die$formatMsg ); 
            } 
        } 
        
    else 
        { 
            
    die"需要加水印的图片不存在!" ); 
        }

         
    //水印位置 
         if$isWaterImage ) //图片水印 
         { 
             
    $w = $water_w ; 
             
    $h = $water_h ; 
             
    $label = "图片的" ; 
        } 
        
    else //文字水印 
         { 
             
    $temp = imagettfbbox ( ceil ( $textFont * 2.5 ), 0 , "./1.ttf" , $waterText ); //取得使用 TrueType 字体的文本的范围 
             $w = $temp [ 2 ] - $temp [ 6 ]; 
             
    $h = $temp [ 3 ] - $temp [ 7 ]; 
            
    unset$temp ); 
             
    $label = "文字区域" ; 
        } 
        
    if( ( $ground_w < $w ) || ( $ground_h < $h ) ) 
        { 
            
    echo "需要加水印的图片的长度或宽度比水印" . $label . "还小,无法生成水印!" ; 
            
    return
        } 
        
    switch$waterPos ) 
        { 
            
    case 0 : //随机 
                 $posX = rand ( 0 ,$ground_w - $w )); 
                 
    $posY = rand ( 0 ,$ground_h - $h )); 
                
    break
            
    case 1 : //1为顶端居左 
                 $posX = 0 ; 
                 
    $posY = 0 ; 
                
    break
            
    case 2 : //2为顶端居中 
                 $posX = ( $ground_w - $w ) / 2 ; 
                 
    $posY = 0 ; 
                
    break
            
    case 3 : //3为顶端居右 
                 $posX = $ground_w - $w ; 
                 
    $posY = 0 ; 
                
    break
            
    case 4 : //4为中部居左 
                 $posX = 0 ; 
                 
    $posY = ( $ground_h - $h ) / 2 ; 
                
    break
            
    case 5 : //5为中部居中 
                 $posX = ( $ground_w - $w ) / 2 ; 
                 
    $posY = ( $ground_h - $h ) / 2 ; 
                
    break
            
    case 6 : //6为中部居右 
                 $posX = $ground_w - $w ; 
                 
    $posY = ( $ground_h - $h ) / 2 ; 
                
    break
            
    case 7 : //7为底端居左 
                 $posX = 0 ; 
                 
    $posY = $ground_h - $h ; 
                
    break
            
    case 8 : //8为底端居中 
                 $posX = ( $ground_w - $w ) / 2 ; 
                 
    $posY = $ground_h - $h ; 
                
    break
            
    case 9 : //9为底端居右 
                 $posX = $ground_w - $w ; 
                 
    $posY = $ground_h - $h ; 
                
    break
            
    default: //随机 
                 $posX = rand ( 0 ,$ground_w - $w )); 
                 
    $posY = rand ( 0 ,$ground_h - $h )); 
                
    break;     
        }

         
    //设定图像的混色模式 
         imagealphablending ( $ground_im , true );

        
    if$isWaterImage ) //图片水印 
         { 
             imagecopy ( 
    $ground_im , $water_im , $posX , $posY , 0 , 0 , $water_w , $water_h ); //拷贝水印到目标文件         
         } 
        
    else //文字水印 
         { 
            
    if!empty$textColor ) && ( strlen ( $textColor )== 7 ) ) 
            { 
                 
    $R = hexdec ( substr ( $textColor , 1 , 2 )); 
                 
    $G = hexdec ( substr ( $textColor , 3 , 2 )); 
                 
    $B = hexdec ( substr ( $textColor , 5 )); 
            } 
            
    else 
            { 
                
    die"水印文字颜色格式不正确!" ); 
            } 
             imagestring ( 
    $ground_im , $textFont , $posX , $posY , $waterText , imagecolorallocate ( $ground_im , $R , $G , $B ));         
        }

         
    //生成水印后的图片 
         @ unlink ( $groundImage ); 
        
    switch$ground_info [ 2 ]) //取得背景图片的格式 
         { 
            
    case 1 : imagegif ( $ground_im , $groundImage );break
            
    case 2 : imagejpeg ( $ground_im , $groundImage );break
            
    case 3 : imagepng ( $ground_im , $groundImage );break
            
    default:die$errorMsg ); 
        }

         
    //释放内存 
         if(isset$water_info )) unset$water_info ); 
        
    if(isset$water_im )) imagedestroy ( $water_im ); 
        
    unset$ground_info ); 
         imagedestroy ( 
    $ground_im ); 
    }

    imageWaterMark ( 
    "1.jpg" , 0 , "watermark.gif" , "http://www.qltv.com.cn" , 5 , "#FF0000" );

    //--------------------------------------------------------------------------------------- 
    /*

    if(isset( $_FILES ) && !empty( $_FILES [ 'userfile' ]) && $_FILES [ 'userfile' ][ 'size' ]> 0 ) 

         $uploadfile = "./" . time (). "_" . $_FILES [ 'userfile' ][ 'name' ]; 
        if ( copy ( $_FILES [ 'userfile' ][ 'tmp_name' ], $uploadfile )) 
        { 
            echo "OK<br>" ;

             //文字水印 
             imageWaterMark ( $uploadfile , 0 , "" , "http://www.qltv.com.cn" , 5 , "#FF0000" );

             //图片水印 
            //$waterImage="./Hanweb_shuiyin.gif";//水印图片路径 
            //imageWaterMark($uploadfile,0,$waterImage);

             echo "<img src=\"" . $uploadfile . "\" border=\"0\">" ; 
        } 
        else 
        { 
            echo "Fail<br>" ; 
        } 

    */
    ?> <form enctype="multipart/form-data" method="POST"> 
    文件
    : <input name="userfile" type="file"> 
    <input type="submit" value="上传"> 
    </form>
  • 相关阅读:
    python初体验-函数(1)
    python初体验-数值类型
    python初体验-常见错误类型
    动态规划专题——passage_1
    七夕——ORMAX(线段树)
    七夕——永远在一起(一维dp)
    动态规划4.4——背包问题
    动态规划4.3——最长公共子串问题
    动态规划4.2——子序列问题
    动态规划4.1——基础动态规划问题
  • 原文地址:https://www.cnblogs.com/studio313/p/1052431.html
Copyright © 2011-2022 走看看