php上传图片加水印,图片水印,文字水印

这是一款比较完整的在用户上传图片时就自动给图片增加上水印,这款增加水印功能可以增加文字水印与图片水印,实例代码如下:

  1. /*
  2. * created on 2010-6-21
  3. *
  4. * the class for control image
  5. *
  6. * made by s71ence
  7. *
  8. * @$img_path 图片路径
  9. * @$is_auto_reduce 图片是否自动按照大小等级压缩 1是
  10. * @$is_appoint 是否手动进行压缩或放大 1是
  11. * @$multiple 手动指定压缩/放大比例
  12. * @$is_water_str 是否加水印文字 1是
  13. * @$water_str 水印文字
  14. * @$is_watermark 是否加水印图片 1是
  15. * @$logo_path 水印图片路径
  16. * @$is_display 是否显示图片 1是
  17. * @$is_create 是否生成压缩后的图片 1是
  18. *
  19. * 注:
  20. * 1.生成新图时不可显示图片,即$isdisplay和$iscreate不可同时置为1
  21. * 2.当图片宽或高小于1000时,需手动设置压缩比例进行压缩
  22. * 3.不建议启用水印,若要启用,建议原图片大小最好在1000以内
  23. * 4.水印文字中不可含有中文
  24. * 5.新生成的图片在原目录文件中,支持n个层级
  25. */
  26. class image_control
  27. {
  28. private $img_path;
  29. private $is_auto_reduce;
  30. private $is_appoint;
  31. private $multiple;
  32. private $is_water_str;
  33. private $water_str;
  34. private $is_watermark;
  35. private $logo_path;
  36. private $is_display;
  37. private $is_create;
  38. function __construct($img_path,$is_auto_reduce,$is_appoint,$multiple,$is_water_str,$water_str,$is_watermark,$logo_path,$is_display,$is_create)
  39. {
  40. $this->img_path=$img_path;
  41. $this->is_auto_reduce=$is_auto_reduce;
  42. $this->is_appoint=$is_appoint;
  43. $this->multiple=$multiple;
  44. $this->is_water_str=$is_water_str;
  45. $this->water_str=$water_str;
  46. $this->is_watermark=$is_watermark;
  47. $this->logo_path=$logo_path;
  48. $this->is_display=$is_display;
  49. $this->is_create=$is_create;
  50. }
  51. function img_control()
  52. {
  53. //获取原图
  54. $img_info=getimagesize($this->img_path);
  55. switch($img_info[2])
  56. {
  57. case 1:
  58. $img_get=@imagecreatefromgif($this->img_path);
  59. break;
  60. case 2:
  61. $img_get=@imagecreatefromjpeg($this->img_path);
  62. break;
  63. case 3:
  64. $img_get=@imagecreatefrompng($this->img_path);
  65. break;
  66. }
  67. //文字水印
  68. if($this->is_water_str==1)
  69. {
  70. //imagettftext(原图,文字大小,文字旋转,水印起始坐标x,水印起始坐标y,$te,'simhei.ttf',$str);
  71. $te=imagecolorallocate($img_get,255,255,255);
  72. $str=iconv("gbk","utf-8",$this->water_str);//水印文字
  73. imagettftext($img_get,16,0,$img_info[0]-200,$img_info[1]-20,$te,'msyh.ttf',$str);
  74. }
  75. //图片水印
  76. if($this->is_watermark==1)
  77. {
  78. //水印图片处理
  79. $logo_info=getimagesize($this->logo_path);
  80. switch($logo_info[2])
  81. {
  82. case 1:
  83. $logo=@imagecreatefromgif($this->logo_path);
  84. break;
  85. case 2:
  86. $logo=@imagecreatefromjpeg($this->logo_path);
  87. break;
  88. case 3:
  89. $logo=@imagecreatefrompng($this->logo_path);
  90. break;
  91. }
  92. //水印logo图片
  93. //函数说明:imagecopy(原图,水印图片,水印坐标x,水印坐标y,水印图片开始坐标x,水印图片开始坐标y,'水印图片宽','水印图片高');
  94. imagecopy($img_get,$logo,0,0,0,0,$logo_info[0],$logo_info[1]);
  95. }
  96. //自动图片压缩 按图片大小分级自动压缩
  97. //imagecopyresized(画布,原图,画布起始x坐标,画布起始y坐标,原图起始x坐标,原图起始x坐标,新图片宽,新图片高,原图片宽,原图片高);
  98. if($this->is_auto_reduce==1)
  99. {
  100. if($img_info[0]>=3000 || $img_info[1]>=3000)
  101. {
  102. $new_image_get=imagecreatetruecolor($img_info[0]*0.03,$img_info[1]*0.03);//生成画布
  103. imagecopyresized($new_image_get,$img_get,0,0,0,0,$img_info[0]*0.03,$img_info[1]*0.03,$img_info[0],$img_info[1]);
  104. }
  105. else if($img_info[0]>=2500 || $img_info[1]>=2500)
  106. {
  107. $new_image_get=imagecreatetruecolor($img_info[0]*0.04,$img_info[1]*0.04);
  108. imagecopyresized($new_image_get,$img_get,0,0,0,0,$img_info[0]*0.04,$img_info[1]*0.04,$img_info[0],$img_info[1]);
  109. }
  110. else if($img_info[0]>=2000 || $img_info[1]>=2000)
  111. {
  112. $new_image_get=imagecreatetruecolor($img_info[0]*0.05,$img_info[1]*0.05);
  113. imagecopyresized($new_image_get,$img_get,0,0,0,0,$img_info[0]*0.05,$img_info[1]*0.05,$img_info[0],$img_info[1]);
  114. }
  115. else if($img_info[0]>=1500 || $img_info[1]>=1500)
  116. {
  117. $new_image_get=imagecreatetruecolor($img_info[0]*0.08,$img_info[1]*0.08);
  118. imagecopyresized($new_image_get,$img_get,0,0,0,0,$img_info[0]*0.08,$img_info[1]*0.08,$img_info[0],$img_info[1]);
  119. }
  120. else if($img_info[0]>=1000 || $img_info[1]>=1000)
  121. {
  122. $new_image_get=imagecreatetruecolor($img_info[0]*0.1,$img_info[1]*0.1);
  123. imagecopyresized($new_image_get,$img_get,0,0,0,0,$img_info[0]*0.1,$img_info[1]*0.1,$img_info[0],$img_info[1]);
  124. }
  125. else if($img_info[0]>=500 || $img_info[1]>=500)
  126. {
  127. $new_image_get=imagecreatetruecolor($img_info[0]*0.2,$img_info[1]*0.2);
  128. imagecopyresized($new_image_get,$img_get,0,0,0,0,$img_info[0]*0.2,$img_info[1]*0.2,$img_info[0],$img_info[1]);
  129. }
  130. else if($img_info[0]>=300 || $img_info[1]>=300)
  131. {
  132. $new_image_get=imagecreatetruecolor($img_info[0]*0.3,$img_info[1]*0.3);
  133. imagecopyresized($new_image_get,$img_get,0,0,0,0,$img_info[0]*0.3,$img_info[1]*0.3,$img_info[0],$img_info[1]);
  134. }
  135. else
  136. {
  137. $new_image_get=imagecreatetruecolor($img_info[0]*1,$img_info[1]*1);
  138. imagecopyresized($new_image_get,$img_get,0,0,0,0,$img_info[0]*1,$img_info[1]*1,$img_info[0],$img_info[1]);
  139. }
  140. }
  141. //手动图片压缩
  142. //imagecopyresized(画布,原图,画布起始x坐标,画布起始y坐标,原图起始x坐标,原图起始x坐标,新图片宽,新图片高,原图片宽,原图片高);
  143. if($this->is_appoint)
  144. {
  145. $new_image_get=imagecreatetruecolor($img_info[0]*$this->multiple,$img_info[1]*$this->multiple);//生成画布
  146. imagecopyresized($new_image_get,$img_get,0,0,0,0,$img_info[0]*$this->multiple,$img_info[1]*$this->multiple,$img_info[0],$img_info[1]);
  147. }
  148. //图像输出
  149. if($this->is_display==1)
  150. {
  151. header("content-type: image/jpeg");
  152. return imagejpeg($new_image_get);
  153. }
  154. //新图像生成
  155. if($this->is_create==1)
  156. {
  157. $new_name=explode("/",$this->img_path);
  158. $new_name_string="";
  159. for($i=0;$i<count($new_name)-1;$i++)
  160. {
  161. $new_name_string.=$new_name[$i]."/";
  162. }
  163. $new_img_path=$new_name_string."new".$new_name[$i];
  164. if(imagejpeg($new_image_get,$new_img_path) && imagejpeg($img_get,$this->img_path))
  165. {
  166. setcookie("img_new_path", $new_img_path);
  167. //return "图片生成成功!<br/>新图:".$new_img_path."<br/>原图:".$this->img_path;
  168. }
  169. else
  170. {
  171. return "图片生成失败,请检查配置是否正确!";
  172. }
  173. }
  174. }
  175. function __desctruct()
  176. {
  177. //clear
  178. }
  179. }
  180. //开源代码phpfensi.com
  181. //调用方法,代码如下:
  182. /* $img_path="../users/user_photo/t2.jpg"; //被操作的图片路径
  183. $is_auto_reduce=1;//图片是否自动按照大小等级压缩 1是
  184. $is_appoint=0;//是否手动进行压缩 1是
  185. $multiple=0.5;//手动指定压缩比例
  186. $is_water_str=0;//是否加水印文字
  187. $water_str="www.111cn.net";//水印文字
  188. $is_watermark=0;//是否加水印图片 1是
  189. $logo_path="../image/logo_about.gif";//水印图片路径
  190. $is_display=0;//是否显示图片 1是
  191. $is_create=1;//是否生成压缩后的图片 1是
  192. $img=new image_control($img_path,$is_auto_reduce,$is_appoint,$multiple,$is_water_str,$water_str,$is_watermark,$logo_path,$is_display,$is_create);
  193. echo $img->img_control();*/