首页 > 语言 > PHP > 正文

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

2024-09-04 11:44:23
字体:
来源:转载
供稿:网友

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表