在之前的文章中為大家帶來了《PHP中怎樣完成圖像的縮放和裁剪? (實例詳解)》,其中透過實例向大家介紹了在PHP中應該怎樣去進行圖形的縮放和裁剪,本篇文章繼續來看一看PHP中圖形處理的知識,我們應該怎樣給圖片增加水印。希望對大家有幫助!
在我們的日常生活中,為了不希望自己的圖片被盜用,經常能夠看到在一些圖片上添加水印,比如我們網站上,輸入圖片文件的話會自動在右下角加上一個浮水印,那麼這種浮水印效果是怎麼實現的呢?透過PHP就可以實現為圖片增加浮水印的效果。
在先前文章中將圖片裁剪放到目標圖上的操作和添加浮水印有些類似,為了實現添加浮水印,需要通過 imagecopymerge函數。
<strong><span style="font-size: 18px;">imagecopymerge</span></strong>
#函數
imagecopymerge($目标图片,$来源图片,$目标开始的x ,$目标开始的y,$来源的x ,$来源的y ,$来源的宽 ,$来源的高 ,$透明度)其中透明度的值是0-100的整數,透明度的值越大,水印越不透明。
<?php //打开目标图片 $dst = imagecreatefrompng('test.png'); //打开Logo来源图片 $src = imagecreatefrompng('logo.png'); //得到目标图片的宽高 $dst_info = getimagesize('test.png'); //得到logo图片的宽高 $src_info = getimagesize('logo.png'); //放到最右下脚可得出图片水印图片需要开始的位置即: //x点位置:需要大图的宽 - 小图的宽; //y点位置:放大图的高 - 小图的高 $dst_x = $dst_info[0] - $src_info[0]; $dst_y = $dst_info[1] - $src_info[1]; //要将图片加在右下脚 imagecopymerge($dst, $src, $dst_x, $dst_y, 0, 0, $src_info[0], $src_info[1], 50); header('Content-type:image/png'); imagepng($dst); imagedestroy($dst); imagedestroy($src); ?>輸出結果:
拓展知識<strong>imagecopy<span style="font-size: 18px;"></span></strong>
函數
imagecopy() 函數,它能夠複製函數的一部分,它的語法格式如下:
imagecopy($目标图片, $来源图片,$目标图片x,$目标图片y,$来源图片x,$来源图片y,$来源图片宽,$来源图片高)它的意思是,在來源圖片的(x,y)的地方選取寬為w,高為h的矩形區域到目標圖片的(x,y)上。
imagesx(resource $image) imagesy(resource $image)實例如下:
<?php function watermark($img, $watermark, $district = 0,$watermarkquality = 95){ $imginfo = @getimagesize($img); $watermarkinfo = @getimagesize($watermark); $img_w = $imginfo[0]; $img_h = $imginfo[1]; $watermark_w = $watermarkinfo[0]; $watermark_h = $watermarkinfo[1]; if($district == 0) $district = rand(1,9); if(!is_int($district) OR 1 > $district OR $district > 9) $district = 9; switch($district){ case 1: $x = +5; $y = +5; break; case 2: $x = ($img_w - $watermark_w) / 2; $y = +5; break; case 3: $x = $img_w - $watermark_w - 5; $y = +5; break; case 4: $x = +5; $y = ($img_h - $watermark_h) / 2; break; case 5: $x = ($img_w - $watermark_w) / 2; $y = ($img_h - $watermark_h) / 2; break; case 6: $x = $img_w - $watermark_w; $y = ($img_h - $watermark_h) / 2; break; case 7: $x = +5; $y = $img_h - $watermark_h - 5; break; case 8: $x = ($img_w - $watermark_w) / 2; $y = $img_h - $watermark_h - 5; break; case 9: $x = $img_w - $watermark_w - 5; $y = $img_h - $watermark_h - 5; break; } switch ($imginfo[2]) { case 1: $im = @imagecreatefromgif($img); break; case 2: $im = @imagecreatefromjpeg($img); break; case 3: $im = @imagecreatefrompng($img); break; } switch ($watermarkinfo[2]) { case 1: $watermark_logo = @imagecreatefromgif($watermark); break; case 2: $watermark_logo = @imagecreatefromjpeg($watermark); break; case 3: $watermark_logo = @imagecreatefrompng($watermark); break; } if(!$im or !$watermark_logo) return false; $dim = @imagecreatetruecolor($img_w, $img_h); if(@imagecopy($dim, $im, 0, 0, 0, 0,$img_w,$img_h )){ imagecopy($dim, $watermark_logo, $x, $y, 0, 0, $watermark_w, $watermark_h); } $file = dirname($img) . '/w' . basename($img); $result = imagejpeg ($dim,$file,$watermarkquality); imagedestroy($watermark_logo); imagedestroy($dim); imagedestroy($im); if($result){ echo $img.' 水印添加成功'; return; } else { return false; } } $file = 'test.png'; //待加水印的图片地址 $water = 'logo.png'; //水印图片的地址 watermark($file, $water); ?>輸出結果:
##效果如下:
推薦學習:《
PHP影片教學以上是一定要搞懂PHP如何加入圖片浮水印的詳細內容。更多資訊請關注PHP中文網其他相關文章!