国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - php實現(xiàn)給一張圖片加上水印效果

php實現(xiàn)給一張圖片加上水印效果

2020-12-12 19:52php中文網(wǎng) PHP教程

本文給大家匯總了2個php實現(xiàn)給圖片加水印的功能,第一個比較簡單易懂,第二個功能強大些,而且給大家封裝了起來,有需要的小伙伴可以參考下

php實現(xiàn)給一張圖片加上水印效果

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?php
/**
 * 功能:給一張圖片加上水印效果
 *      $i 要加水印效果的圖片
 *      $t 水印文字
 *      $size 文字大小
 *      $pos 水印的位置
 *      $color 文字的顏色
 *      $flag 是布爾值,主要用來區(qū)分是不是原圖上加水印
 *      $type 如果$flag等于false 則新圖上加上水印 新文件名為 原名_txt.jpg
 */
function txt($i,$t='版權所有',$size=25,$pos=5,$color='rand',$flag=true,$type='_txt'){
  $img = imagecreatefromjpeg($i);
  $w = imagesx($img);
  $h = imagesy($img);
  $font = dirname(__FILE__).'/font/ls.ttf';
  $ps = imagettfbbox($size,0,$font,$t);
  $tw = $ps[4];
  $th = abs($ps[5]);
  switch($pos){
    case 1:break
    case 2:break
    case 3:break
    case 4:break
    case 5:$x=($w-$tw)/2;$y=($h-$th)/2+$th;break
    case 6:break
    case 7:break
    case 8:break
    case 9:break
    default:break;
  }
  $c = getcolor($img,$color);
  imagettftext($img,$size,0,$x,$y,$c,$font,$t);
  if($flag){
    imagejpeg($img,$i);
  }else{
    $ext = ext($i);
    $ppp = rtrim($i,'.'.$ext);
    $ppp = $ppp.$type.'.'.$ext;
    imagejpeg($img,$ppp);
  }
}
 
function getcolor($i,$c='rand',$a=50){
  $cc = '';
  switch($c){
    case 'white':$cc=imagecolorallocatealpha($i,255,255,255,$a);break;
    case 'black':$cc=imagecolorallocatealpha($i,0,0,0,$a);break;
    case 'red':$cc=imagecolorallocatealpha($i,255,0,0,$a);break;
    case 'green':$cc=imagecolorallocatealpha($i,0,255,0,$a);break;
    case 'blue':$cc=imagecolorallocatealpha($i,0,0,255,$a);break;
    case 'orange':$cc=imagecolorallocatealpha($i,0xff,0x66,0x33,$a);break;
    case 'yellow':$cc=imagecolorallocatealpha($i,255,255,0,$a);break;
    case 'rand':$cc=imagecolorallocatealpha($i,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255),$a);break;
    default:
      $cs = substr($c,1);
      $ok = str_split($cs,2);
      $cc = imagecolorallocatealpha($i,hexdec($ok[0]),hexdec($ok[1]),hexdec($ok[2]),$a);
    break;  
  }
  return $cc;
}
 
 
/**
 * 功能是:返回擴展名
 */
 
function ext($f){
  $exts = explode('.',$f);
  return end($exts);
}
 
/**
 * 功能是:返回文件名,不含擴展名
 */
function name($f){
  $s = explode('/',$f);
  $fn = end($s);
  return rtrim($fn,'.'.ext($f));
}

我們再來看一個支持以圖片和文字兩種方式給圖片添加水印。圖片支持GIF,PNG,JPG三種格式,水印圖片支持PNG和GIF

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
function setWater($imgSrc,$markImg,$markText,$TextColor,$markPos,$fontType,$markType)
{
 
  $srcInfo = @getimagesize($imgSrc);
  $srcImg_w  = $srcInfo[0];
  $srcImg_h  = $srcInfo[1];
    
  switch ($srcInfo[2])
  {
    case 1:
      $srcim =imagecreatefromgif($imgSrc);
      break;
    case 2:
      $srcim =imagecreatefromjpeg($imgSrc);
      break;
    case 3:
      $srcim =imagecreatefrompng($imgSrc);
      break;
    default:
      die("不支持的圖片文件類型");
      exit;
  }
    
  if(!strcmp($markType,"img"))
  {
    if(!file_exists($markImg) || empty($markImg))
    {
      return;
    }
      
    $markImgInfo = @getimagesize($markImg);
    $markImg_w  = $markImgInfo[0];
    $markImg_h  = $markImgInfo[1];
      
    if($srcImg_w < $markImg_w || $srcImg_h < $markImg_h)
    {
      return;
    }
      
    switch ($markImgInfo[2])
    {
      case 1:
        $markim =imagecreatefromgif($markImg);
        break;
      case 2:
        $markim =imagecreatefromjpeg($markImg);
        break;
      case 3:
        $markim =imagecreatefrompng($markImg);
        break;
      default:
        die("不支持的水印圖片文件類型");
        exit;
    }
      
    $logow = $markImg_w;
    $logoh = $markImg_h;
  }
    
  if(!strcmp($markType,"text"))
  {
    $fontSize = 16;
    if(!empty($markText))
    {
      if(!file_exists($fontType))
      {
        return;
      }
    }
    else {
      return;
    }
      
    $box = @imagettfbbox($fontSize, 0, $fontType,$markText);
    $logow = max($box[2], $box[4]) - min($box[0], $box[6]);
    $logoh = max($box[1], $box[3]) - min($box[5], $box[7]);
  }
    
  if($markPos == 0)
  {
    $markPos = rand(1, 9);
  }
    
  switch($markPos)
  {
    case 1:
      $x = +5;
      $y = +5;
      break;
    case 2:
      $x = ($srcImg_w - $logow) / 2;
      $y = +5;
      break;
    case 3:
      $x = $srcImg_w - $logow - 5;
      $y = +15;
      break;
    case 4:
      $x = +5;
      $y = ($srcImg_h - $logoh) / 2;
      break;
    case 5:
      $x = ($srcImg_w - $logow) / 2;
      $y = ($srcImg_h - $logoh) / 2;
      break;
    case 6:
      $x = $srcImg_w - $logow - 5;
      $y = ($srcImg_h - $logoh) / 2;
      break;
    case 7:
      $x = +5;
      $y = $srcImg_h - $logoh - 5;
      break;
    case 8:
      $x = ($srcImg_w - $logow) / 2;
      $y = $srcImg_h - $logoh - 5;
      break;
    case 9:
      $x = $srcImg_w - $logow - 5;
      $y = $srcImg_h - $logoh -5;
      break;
    default:
      die("此位置不支持");
      exit;
  }
    
  $dst_img = @imagecreatetruecolor($srcImg_w, $srcImg_h);
    
  imagecopy ( $dst_img, $srcim, 0, 0, 0, 0, $srcImg_w, $srcImg_h);
    
  if(!strcmp($markType,"img"))
  {
    imagecopy($dst_img, $markim, $x, $y, 0, 0, $logow, $logoh);
    imagedestroy($markim);
  }
    
  if(!strcmp($markType,"text"))
  {
    $rgb = explode(',', $TextColor);
      
    $color = imagecolorallocate($dst_img, $rgb[0], $rgb[1], $rgb[2]);
    imagettftext($dst_img, $fontSize, 0, $x, $y, $color, $fontType,$markText);
  }
    
  switch ($srcInfo[2])
  {
    case 1:
      imagegif($dst_img, $imgSrc);
      break;
    case 2:
      imagejpeg($dst_img, $imgSrc);
      break;
    case 3:
      imagepng($dst_img, $imgSrc);
      break;
    default:
      die("不支持的水印圖片文件類型");
      exit;
  }
    
  imagedestroy($dst_img);
  imagedestroy($srcim);
}

參數(shù)說明:

$imgSrc:目標圖片,可帶相對目錄地址,
$markImg:水印圖片,可帶相對目錄地址,支持PNG和GIF兩種格式,如水印圖片在執(zhí)行文件mark目錄下,可寫成:mark/mark.gif
$markText:給圖片添加的水印文字
$TextColor:水印文字的字體顏色
$markPos:圖片水印添加的位置,取值范圍:0~9
0:隨機位置,在1~8之間隨機選取一個位置
1:頂部居左 2:頂部居中 3:頂部居右 4:左邊居中
5:圖片中心 6:右邊居中 7:底部居左 8:底部居中 9:底部居右
$fontType:具體的字體庫,可帶相對目錄地址
$markType:圖片添加水印的方式,img代表以圖片方式,text代表以文字方式添加水印

代碼注釋:

第4~6行:獲取目標圖片的寬度和高度
第8~22行:根據(jù)圖片類型調(diào)用不同的函數(shù),獲得操作圖像標識符

GetImageSize函數(shù)知識點:GetImageSize不需要安裝 GD度就可使用,其返回值數(shù)組有四個元素。索引值0是圖片高度。索引值1是圖片的寬度。索引值2是圖片的文件格式,其值1為GIF格式、2為JPEG/JPG格式、3為PNG格式。索引值3為圖片的高與寬字符串,height=xxx width=yyy。返回的圖片寬度和高度單位都是像素(pixel)

第24~58行:當選擇圖片方式給目標圖片添加水印時,獲取水印圖片的寬度和高度,通常情況都是網(wǎng)站的logo。如果目標圖片比水印圖片寬度或者高度小或者水印圖片不存在,則跳出這個函數(shù)。

return語句知識點:直接return 表示什么都不返回,直接結束這個函數(shù)。也可以理解成返回 NULL。

第60~77行:當選擇文字方式給目標圖片添加水印時,首先設定水印文字的大小,默認我設置為16px,你可以根據(jù)需要自行調(diào)整字體大小。如果字體文件不存在,跳出函數(shù),最后通過imagettfbbox函數(shù)獲得此設定格式的文字的虛擬長寬。

imagettfbbox函數(shù)知識點:此函數(shù)返回一個含有8個單元的數(shù)組表示文本外框的四個角,索引值含義:0代表左下角 X 位置,1代表坐下角 Y 位置,2代表右下角 X 位置,3代表右下角 Y 位置,4代表右上角 X 位置,5代表右上角 Y 位置,6代表左上角 X 位置,7代表左上角 Y 位置。此函數(shù)同時需要GD 庫和FreeType庫的支持
max函數(shù)返回參數(shù)中數(shù)值最大的值。

第79~125行:根據(jù)設定的圖片水印位置計算具體坐標值,你可以根據(jù)效果具體細化水印的位置。

第127~129行:新建一個和目標圖片大小一致的圖片。

注:由于imagecreatetruecolor函數(shù)范圍的是一個黑色圖片,所以如果你的目標圖片是透明的,則生成的新圖將不會是透明色。

第131~162行:根據(jù)圖片或者文字方式,最終生成添加了水印的圖片。

調(diào)用說明:

以函數(shù)調(diào)用方式調(diào)用即可,當然你也可以以類的方式封裝,或者你也可以根據(jù)需要將此函數(shù)進一步細分模塊也可以。當然你現(xiàn)在這樣用也是沒有任何問題的,我已測試過,請放心使用。

其他說明:

由于imagettftext和imagettfbbox函數(shù)需要GD庫和FreeType庫的支持,如果你的運行環(huán)境不支持GD庫和FreeType庫則文字方式就無法實現(xiàn),你可以用imagestring函數(shù)實現(xiàn)給圖片添加文字水印,同時設定下text方式下的$logow和$logoh值即可。

imagejpeg函數(shù)也可以設置合成的圖片質(zhì)量。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 懂色中文一区二区在线播放 | 国产一区二区三区视频 | 国内久久精品 | 福利社午夜影院 | 懂色一区二区三区av片 | 中文字幕亚洲专区 | 国产白虎 | 久久99久久99| 亚洲精品国产成人 | 成人教育av| 亚洲专区欧美 | 日韩欧美成人一区二区三区 | 99精品网站 | 91久久久久久久久 | 日韩看片| 日本不卡视频 | 精品视频在线播放 | 一区亚洲 | 亚洲综合中文 | 国产一区二区三区播放 | 国产成人一级毛片 | 国产精品一区二 | 国产视频久久久 | 精品国产区 | 亚洲精品乱码久久久久久金桔影视 | av天天干 | 色爱欧美 | 日韩中文一区二区三区 | 欧美一区二区三区 | 99精品国产高清一区二区麻豆 | 日韩在线一区二区三区 | 91视频网 | 色婷婷综合久久久中文字幕 | 成人夜色av| 欧美日韩三区 | 日韩精品影院 | 色九九九 | av在线日韩| 国产日韩欧美 | 国产日韩视频 | 麻豆国产尤物av尤物在线观看 |