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类库的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did29524