好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

php给图片加水印与上传图片加水印php类 - php类库

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 (!emptyempty( $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 (!emptyempty( $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 *5),0,]./cour.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 ( !emptyempty( $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 );   }   //—————————————————————————————    $id = $_REQUEST [ 'id' ];   $num  =  count ( $_FILES [ 'userfile' ][ 'name' ]);   print_r( $_FILES [ 'userfile' ]);   print_r( $_FILES [ 'userfile' ][ 'name' ]);    echo   $num ;   echo  [<bR>];   if (isset( $id )){   for ( $i =0; $i < $id ; $i ++){    if (isset( $_FILES ) && !emptyempty( $_FILES [ 'userfile' ]) &&  $_FILES [ 'userfile' ][ 'size' ]>0)   {   $uploadfile  = [./].time().]_]. $_FILES [ 'userfile' ][name][ $i ];   echo  [<br>];   echo   $uploadfile ;   if  ( copy ( $_FILES [ 'userfile' ][ 'tmp_name' ][ $i ],  $uploadfile ))   {   echo  [OK<br>];    //文字水印    //imageWaterMark($uploadfile,5,]",]HTTP://HdhCmsTestlvye.info],5,]#cccccc[);     //图片水印    $waterImage =]logo_ok1.gif]; //水印图片路径    imageWaterMark( $uploadfile ,9, $waterImage );    echo  [<img src=]". $uploadfile .]] border=]0]>];   }   else    {   echo  [Fail<br>];   }   }   }   }    ?>   <form enctype=]multipart/form-data] method=]POST]>   <?php   for ( $a =0; $a < $id ; $a ++){   echo  [文件: <input name=]userfile[]] type=]file]><br>];    }   ?>   <input type=]submit] value=]上传]>   </form>   ?>    //下面这段代码是一段图片上传并且给上传的图片加水印     参数说明:   $max_file_size   : 上传文件大小限制, 单位BYTE   $destination_folder  : 上传文件路径   $watermark    : 是否附加水印(1为加水印,其他为不加水印);   使用说明:   1. 将PHP.INI文件里面的 "extension=php_gd2.dll" 一行前面的;号去掉,因为我们要用到GD库;   2. 将extension_dir =改为你的php_gd2.dll所在目录;   3. http: //HdhCmsTest111cn.net/php.asp;    ****************************************************/   //上传文件类型列表    $uptypes = array (        'image/jpg' ,         'image/jpeg' ,        'image/png' ,        'image/pjpeg' ,        'image/gif' ,        'image/bmp' ,        'image/x-png'    );   $max_file_size =2000000;      //上传文件大小限制, 单位BYTE    $destination_folder = "uploadimg/" ;  //上传文件路径    $watermark =1;       //是否附加水印(1为加水印,其他为不加水印);    $watertype =1;       //水印类型(1为文字,2为图片)    $waterposition =1;      //水印位置(1为左下角,2为右下角,3为左上角,4为右上角,5为居中);    $waterstring = "http://HdhCmsTestxplore.cn/" ;  //水印字符串   $waterimg = "xplore.gif" ;     //水印图片    $imgpreview =1;       //是否生成预览图(1为生成,其他为不生成);    $imgpreviewsize =1/2;     //缩略图比例    ?>   <html>   <head>   <title>ZwelL图片上传程序</title>   <style type= "text/css教程" >   <!--   body   {        font-size: 9pt;   }   input   {        background-color: #66CCFF;        border: 1px inset #CCCCCC;   }   -->   </style>   </head>   <body>   <form enctype= "multipart/form-data"  method= "post"  name= "upform" >     上传文件:     <input name= "upfile"  type= "file" >     <input type= "submit"  value= "上传" ><br>     允许上传的文件类型为:<?=implode( ', ' , $uptypes )?>   </form>   <?php   if  ( $_SERVER [ 'REQUEST_METHOD' ] ==  'POST' )   {        if  (! is_uploaded_file ( $_FILES [ "upfile" ][tmp_name]))        //是否存在文件        {             echo   "图片不存在HdhCmsTest111cn.net!" ;             exit ;       }        $file  =  $_FILES [ "upfile" ];        if ( $max_file_size  <  $file [ "size" ])        //检查文件大小        {            echo   "文件太大!" ;            exit ;       }        if (!in_array( $file [ "type" ],  $uptypes ))        //检查文件类型        {            echo   "文件类型不符!" . $file [ "type" ];            exit ;       }        if (! file_exists ( $destination_folder ))       {            mkdir ( $destination_folder );       }        $filename = $file [ "tmp_name" ];        $image_size  =  getimagesize ( $filename );        $pinfo = pathinfo ( $file [ "name" ]);        $ftype = $pinfo [ 'extension' ];        $destination  =  $destination_folder .time(). "." . $ftype ;        if  ( file_exists ( $destination ) &&  $overwrite  != true)       {            echo   "同名文件已经存在了" ;            exit ;       }        if (!move_uploaded_file ( $filename ,  $destination ))       {            echo   "移动文件出错" ;            exit ;       }        $pinfo = pathinfo ( $destination );        $fname = $pinfo [ basename ];        echo   " <font color=red>已经成功上传</font><br>文件名:  <font color=blue>" . $destination_folder . $fname . "</font><br>" ;        echo   " 宽度:" . $image_size [0];        echo   " 长度:" . $image_size [1];        echo   "<br> 大小:" . $file [ "size" ]. " bytes" ;        if ( $watermark ==1)       {            $iinfo = getimagesize ( $destination , $iinfo );            $nimage =imagecreatetruecolor( $image_size [0], $image_size [1]);            $white =imagecolorallocate( $nimage ,255,255,255);            $black =imagecolorallocate( $nimage ,0,0,0);            $red =imagecolorallocate( $nimage ,255,0,0);           imagefill( $nimage ,0,0, $white );            switch  ( $iinfo [2])           {                case  1:                $simage  =imagecreatefromgif( $destination );                break ;                case  2:                $simage  =imagecreatefromjpeg( $destination );                break ;                case  3:                $simage  =imagecreatefrompng( $destination );                break ;                case  6:                $simage  =imagecreatefromwbmp( $destination );                break ;                default :                die ( "不支持的文件类型" );                exit ;           }           imagecopy( $nimage , $simage ,0,0,0,0, $image_size [0], $image_size [1]);           imagefilledrectangle( $nimage ,1, $image_size [1]-15,80, $image_size [1], $white );            switch ( $watertype )           {                case  1:    //加水印字符串                imagestring( $nimage ,2,3, $image_size [1]-15, $waterstring , $black );                break ;                case  2:    //加水印图片                 $simage1  =imagecreatefromgif( "xplore.gif" );               imagecopy( $nimage , $simage1 ,0,0,0,0,85,15);               imagedestroy( $simage1 );                break ;           }            switch  ( $iinfo [2])           {                case  1:                //imagegif($nimage, $destination);                imagejpeg( $nimage ,  $destination );                break ;                case  2:               imagejpeg( $nimage ,  $destination );                break ;                case  3:               imagepng( $nimage ,  $destination );                break ;                case  6:               imagewbmp( $nimage ,  $destination );                //imagejpeg($nimage, $destination);                 break ;           }            //覆盖原上传文件            imagedestroy( $nimage );           imagedestroy( $simage );       }  //开源代码phpfensi测试数据        if ( $imgpreview ==1)       {        echo   "<br>图片预览:<br>" ;        echo   "<img src=" ".$destination." " width=" .( $image_size [0]* $imgpreviewsize ). " height=" .( $image_size [1]* $imgpreviewsize );        echo   " alt=" 图片预览: 文件名: ".$destination."  HdhCmsTest111cn.net上传时间: ">" ;       }   }

查看更多关于php给图片加水印与上传图片加水印php类 - php类库的详细内容...

  阅读:45次