php专区

 首页 > php专区 > PHP应用 > php类库 > php给图片加水印与上传图片加水印php类 - php类库

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

分享到:
【字体:大 中 小】
导读:
          /**功能:PHP图片水印(水印支持图片或文字)*参数:*$groundImage背景图片,即需要加水印的图片,暂只支持GIF,JPG,PNG格式;*$waterPos水印......

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

  1. /*  
  2. * 功能:PHP图片水印 (水印支持图片或文字)  
  3. * 参数:  
  4. * $groundImage 背景图片,即需要加水印的图片,暂只支持GIF,JPG,PNG格式;  
  5. * $waterPos 水印位置,有10种状态,0为随机位置;  
  6. * 1为顶端居左,2为顶端居中,3为顶端居右;  
  7. * 4为中部居左,5为中部居中,6为中部居右;  
  8. * 7为底端居左,8为底端居中,9为底端居右;  
  9. * $waterImage 图片水印,即作为水印的图片,暂只支持GIF,JPG,PNG格式;  
  10. * $waterText 文字水印,即把文字作为为水印,支持ASCII码,不支持中文;  
  11. * $textFont 文字大小,值为1、2、3、4或5,默认为5;  
  12. * $textColor 文字颜色,值为十六进制颜色值,默认为#FF0000(红色);  
  13. *  
  14. * 注意:Support GD 2.0,Support FreeType、GIF Read、GIF Create、JPG 、PNG  
  15. * $waterImage 和 $waterText 最好不要同时使用,选其中之一即可,优先使用 $waterImage。  
  16. * 当$waterImage有效时,参数$waterString、$stringFont、$stringColor均不生效。  
  17. * 加水印后的图片的文件名和 $groundImage 一样。  
  18. * 作者:longware @ 2004-11-3 14:15:13  
  19. */  
  20. function imageWaterMark($groundImage,$waterPos=0,$waterImage=”",$waterText=”",$textFont=5,$textColor=”#FF0000″)  
  21. {  
  22. $isWaterImage = FALSE;  
  23. $formatMsg = “暂不支持该文件格式,请用图片处理软件将图片转换为GIF、JPG、PNG格式。”; 
  24.  
  25. //读取水印文件  
  26. if(!emptyempty($waterImage) && file_exists($waterImage))  
  27. {  
  28. $isWaterImage = TRUE;  
  29. $water_info = getimagesize($waterImage);  
  30. $water_w = $water_info[0];//取得水印图片的宽  
  31. $water_h = $water_info[1];//取得水印图片的高 
  32.  
  33. switch($water_info[2])//取得水印图片的格式  
  34. {  
  35. case 1:$water_im = imagecreatefromgif($waterImage);break;  
  36. case 2:$water_im = imagecreatefromjpeg($waterImage);break;  
  37. case 3:$water_im = imagecreatefrompng($waterImage);break;  
  38. default:die($formatMsg);  
  39. }  
  40. } 
  41.  
  42. //读取背景图片  
  43. if(!emptyempty($groundImage) && file_exists($groundImage))  
  44. {  
  45. $ground_info = getimagesize($groundImage);  
  46. $ground_w = $ground_info[0];//取得背景图片的宽  
  47. $ground_h = $ground_info[1];//取得背景图片的高 
  48.  
  49. switch($ground_info[2])//取得背景图片的格式  
  50. {  
  51. case 1:$ground_im = imagecreatefromgif($groundImage);break;  
  52. case 2:$ground_im = imagecreatefromjpeg($groundImage);break;  
  53. case 3:$ground_im = imagecreatefrompng($groundImage);break;  
  54. default:die($formatMsg);  
  55. }  
  56. }  
  57. else  
  58. {  
  59. die(”需要加水印的图片不存在!”);  
  60. } 
  61.  
  62. //水印位置  
  63. if($isWaterImage)//图片水印  
  64. {  
  65. $w = $water_w;  
  66. $h = $water_h;  
  67. $label = “图片的”;  
  68. }  
  69. else//文字水印  
  70. {  
  71. $temp = imagettfbbox(ceil($textFont*5),0,”./cour.ttf”,$waterText);//取得使用 TrueType 字体的文本的范围  
  72. $w = $temp[2] - $temp[6];  
  73. $h = $temp[3] - $temp[7];  
  74. unset($temp);  
  75. $label = “文字区域”;  
  76. }  
  77. if( ($ground_w<$w) || ($ground_h<$h) )  
  78. {  
  79. echo “需要加水印的图片的长度或宽度比水印”.$label.”还小,无法生成水印!”;  
  80. return;  
  81. }  
  82. switch($waterPos)  
  83. {  
  84. case 0://随机  
  85. $posX = rand(0,($ground_w - $w));  
  86. $posY = rand(0,($ground_h - $h));  
  87. break;  
  88. case 1://1为顶端居左  
  89. $posX = 0;  
  90. $posY = 0;  
  91. break;  
  92. case 2://2为顶端居中  
  93. $posX = ($ground_w - $w) / 2;  
  94. $posY = 0;  
  95. break;  
  96. case 3://3为顶端居右  
  97. $posX = $ground_w - $w;  
  98. $posY = 0;  
  99. break;  
  100. case 4://4为中部居左  
  101. $posX = 0;  
  102. $posY = ($ground_h - $h) / 2;  
  103. break;  
  104. case 5://5为中部居中  
  105. $posX = ($ground_w - $w) / 2;  
  106. $posY = ($ground_h - $h) / 2;  
  107. break;  
  108. case 6://6为中部居右  
  109. $posX = $ground_w - $w;  
  110. $posY = ($ground_h - $h) / 2;  
  111. break;  
  112. case 7://7为底端居左  
  113. $posX = 0;  
  114. $posY = $ground_h - $h;  
  115. break;  
  116. case 8://8为底端居中  
  117. $posX = ($ground_w - $w) / 2;  
  118. $posY = $ground_h - $h;  
  119. break;  
  120. case 9://9为底端居右  
  121. $posX = $ground_w - $w;  
  122. $posY = $ground_h - $h;  
  123. break;  
  124. default://随机  
  125. $posX = rand(0,($ground_w - $w));  
  126. $posY = rand(0,($ground_h - $h));  
  127. break;  
  128. } 
  129.  
  130. //设定图像的混色模式  
  131. imagealphablending($ground_im, true); 
  132.  
  133. if($isWaterImage)//图片水印  
  134. {  
  135. imagecopy($ground_im, $water_im, $posX, $posY, 0, 0, $water_w,$water_h);//拷贝水印到目标文件  
  136. }  
  137. else//文字水印  
  138. {  
  139. if( !emptyempty($textColor) && (strlen($textColor)==7) )  
  140. {  
  141. $R = hexdec(substr($textColor,1,2));  
  142. $G = hexdec(substr($textColor,3,2));  
  143. $B = hexdec(substr($textColor,5));  
  144. }  
  145. else  
  146. {  
  147. die(”水印文字颜色格式不正确!”);  
  148. }  
  149. imagestring ( $ground_im, $textFont, $posX, $posY, $waterText, imagecolorallocate($ground_im, $R, $G, $B));  
  150. } 
  151.  
  152. //生成水印后的图片  
  153. @unlink($groundImage);  
  154. switch($ground_info[2])//取得背景图片的格式  
  155. {  
  156. case 1:imagegif($ground_im,$groundImage);break;  
  157. case 2:imagejpeg($ground_im,$groundImage);break;  
  158. case 3:imagepng($ground_im,$groundImage);break;  
  159. default:die($errorMsg);  
  160. } 
  161.  
  162. //释放内存  
  163. if(isset($water_info)) unset($water_info);  
  164. if(isset($water_im)) imagedestroy($water_im);  
  165. unset($ground_info);  
  166. imagedestroy($ground_im);  
  167. }  
  168. //—————————————————————————————  
  169. $id=$_REQUEST['id'];  
  170. $num = count($_FILES['userfile']['name']);  
  171. print_r($_FILES['userfile']);  
  172. print_r($_FILES['userfile']['name']); 
  173.  
  174. echo $num;  
  175. echo “
    ”;  
  176. if(isset($id)){  
  177. for($i=0;$i<$id;$i++){ 
  178.  
  179. if(isset($_FILES) && !emptyempty($_FILES['userfile']) && $_FILES['userfile']['size']>0)  
  180. {  
  181. $uploadfile = “./”.time().”_”.$_FILES['userfile'][name][$i];  
  182. echo “
    ”;  
  183. echo $uploadfile;  
  184. if (copy($_FILES['userfile']['tmp_name'][$i], $uploadfile))  
  185. {  
  186. echo “OK
    ”; 
  187.  
  188. //文字水印  
  189. //imageWaterMark($uploadfile,5,”",”HTTP://www.lvye.info”,5,”#cccccc“); 
  190.  
  191. //图片水印  
  192. $waterImage=”logo_ok1.gif”;//水印图片路径  
  193. imageWaterMark($uploadfile,9,$waterImage); 
  194.  
  195. echo “$uploadfile.”” border=”0”>”;  
  196. }  
  197. else  
  198. {  
  199. echo “Fail
    ”;  
  200. }  
  201. }  
  202. }  
  203. } 
  204.  
  205. ?>  
  206.   
  207. for($a=0;$a<$id;$a++){  
  208. echo “文件: 
    ”; 
  209.  
  210. }  
  211. ?>  
  212.   
  213.   
  214. ?> 
  215.  
  216. //下面这段代码是一段图片上传并且给上传的图片加水印 
  217.  
  218. 参数说明:  
  219. $max_file_size  : 上传文件大小限制, 单位BYTE  
  220. $destination_folder : 上传文件路径  
  221. $watermark   : 是否附加水印(1为加水印,其他为不加水印);  
  222. 使用说明:  
  223. 1. 将PHP.INI文件里面的"extension=php_gd2.dll"一行前面的;号去掉,因为我们要用到GD库;  
  224. 2. 将extension_dir =改为你的php_gd2.dll所在目录;  
  225. 3. http://www.111cn.net/php.asp;  
  226. ****************************************************/  
  227. //上传文件类型列表  
  228. $uptypes=array(  
  229.     'image/jpg',   
  230.     'image/jpeg',  
  231.     'image/png',  
  232.     'image/pjpeg',  
  233.     'image/gif',  
  234.     'image/bmp',  
  235.     'image/x-png'  
  236. );  
  237. $max_file_size=2000000;     //上传文件大小限制, 单位BYTE  
  238. $destination_folder="uploadimg/"; //上传文件路径  
  239. $watermark=1;      //是否附加水印(1为加水印,其他为不加水印);  
  240. $watertype=1;      //水印类型(1为文字,2为图片)  
  241. $waterposition=1;     //水印位置(1为左下角,2为右下角,3为左上角,4为右上角,5为居中);  
  242. $waterstring="http://www.xplore.cn/";  //水印字符串  
  243. $waterimg="xplore.gif";    //水印图片  
  244. $imgpreview=1;      //是否生成预览图(1为生成,其他为不生成);  
  245. $imgpreviewsize=1/2;    //缩略图比例  
  246. ?>  
  247.   
  248.   
  249. ZwelL图片上传程序  
  250. "text/css教程">  
  251.   
  252.   
  253.   
  254.   
  255. "multipart/form-data" method="post" name="upform">  
  256.   上传文件:  
  257.   "upfile" type="file">  
  258.   "submit" value="上传">
      
  259.   允许上传的文件类型为:', ',$uptypes)?>  
  260.   
  261. if ($_SERVER['REQUEST_METHOD'] == 'POST')  
  262. {  
  263.     if (!is_uploaded_file($_FILES["upfile"][tmp_name]))  
  264.     //是否存在文件  
  265.     {  
  266.          echo "图片不存在www.111cn.net!";  
  267.          exit;  
  268.     }  
  269.     $file = $_FILES["upfile"];  
  270.     if($max_file_size < $file["size"])  
  271.     //检查文件大小  
  272.     {  
  273.         echo "文件太大!";  
  274.         exit;  
  275.     }  
  276.     if(!in_array($file["type"], $uptypes))  
  277.     //检查文件类型  
  278.     {  
  279.         echo "文件类型不符!".$file["type"];  
  280.         exit;  
  281.     }  
  282.     if(!file_exists($destination_folder))  
  283.     {  
  284.         mkdir($destination_folder);  
  285.     }  
  286.     $filename=$file["tmp_name"];  
  287.     $image_size = getimagesize($filename);  
  288.     $pinfo=pathinfo($file["name"]);  
  289.     $ftype=$pinfo['extension'];  
  290.     $destination = $destination_folder.time().".".$ftype;  
  291.     if (file_exists($destination) && $overwrite != true)  
  292.     {  
  293.         echo "同名文件已经存在了";  
  294.         exit;  
  295.     }  
  296.     if(!move_uploaded_file ($filename, $destination))  
  297.     {  
  298.         echo "移动文件出错";  
  299.         exit;  
  300.     }  
  301.     $pinfo=pathinfo($destination);  
  302.     $fname=$pinfo[basename];  
  303.     echo " 已经成功上传
    文件名:  "
    .$destination_folder.$fname."
    "
    ;  
  304.     echo " 宽度:".$image_size[0];  
  305.     echo " 长度:".$image_size[1];  
  306.     echo "
     大小:"
    .$file["size"]." bytes";  
  307.     if($watermark==1)  
  308.     {  
  309.         $iinfo=getimagesize($destination,$iinfo);  
  310.         $nimage=imagecreatetruecolor($image_size[0],$image_size[1]);  
  311.         $white=imagecolorallocate($nimage,255,255,255);  
  312.         $black=imagecolorallocate($nimage,0,0,0);  
  313.         $red=imagecolorallocate($nimage,255,0,0);  
  314.         imagefill($nimage,0,0,$white);  
  315.         switch ($iinfo[2])  
  316.         {  
  317.             case 1:  
  318.             $simage =imagecreatefromgif($destination);  
  319.             break;  
  320.             case 2:  
  321.             $simage =imagecreatefromjpeg($destination);  
  322.             break;  
  323.             case 3:  
  324.             $simage =imagecreatefrompng($destination);  
  325.             break;  
  326.             case 6:  
  327.             $simage =imagecreatefromwbmp($destination);  
  328.             break;  
  329.             default:  
  330.             die("不支持的文件类型");  
  331.             exit;  
  332.         }  
  333.         imagecopy($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]);  
  334.         imagefilledrectangle($nimage,1,$image_size[1]-15,80,$image_size[1],$white);  
  335.         switch($watertype)  
  336.         {  
  337.             case 1:   //加水印字符串  
  338.             imagestring($nimage,2,3,$image_size[1]-15,$waterstring,$black);  
  339.             break;  
  340.             case 2:   //加水印图片  
  341.             $simage1 =imagecreatefromgif("xplore.gif");  
  342.             imagecopy($nimage,$simage1,0,0,0,0,85,15);  
  343.             imagedestroy($simage1);  
  344.             break;  
  345.         }  
  346.         switch ($iinfo[2])  
  347.         {  
  348.             case 1:  
  349.             //imagegif($nimage, $destination);  
  350.             imagejpeg($nimage, $destination);  
  351.             break;  
  352.             case 2:  
  353.             imagejpeg($nimage, $destination);  
  354.             break;  
  355.             case 3:  
  356.             imagepng($nimage, $destination);  
  357.             break;  
  358.             case 6:  
  359.             imagewbmp($nimage, $destination);  
  360.             //imagejpeg($nimage, $destination);  
  361.             break;  
  362.         }  
  363.         //覆盖原上传文件  
  364.         imagedestroy($nimage);  
  365.         imagedestroy($simage);  
  366.     } //开源代码phpfensi.com 
  367.     if($imgpreview==1)  
  368.     {  
  369.     echo "
    图片预览:
    "
    ;  
  370.     echo "".$destination."" width=".($image_size[0]*$imgpreviewsize)." height=".($image_size[1]*$imgpreviewsize);  
  371.     echo " alt="图片预览: 文件名:".$destination." www.111cn.net上传时间:">";  
  372.     }  
  373. }
分享到:
php文件在线压缩程序类 - php类库
php文件在线压缩程序类 提供一款超完美的php文件在线压缩程序,原理很简单就是把文件以二进制形式保存了,以前用过利用rar的内核程序,这是php自带的压缩功能,实例代码如下: set_time_limit(0);  class phpzip{        var $file_count = 0 ;      var $datastr_...
php adodbzip 类 - php类库
php adodbzip 类
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……