PHP给图片添加文字或图片水印的实现代码

简介:

有时上传图片时,需要给图片添加水印,水印一般为文字或图片logo水印,下面就来看看两种添加方法。

一、文字水印

文字水印就是在图片上加上文字,主要使用gd库的imagefttext方法,并且需要字体文件。效果图如下:

 
  1. $dst_path = 'dst.jpg'
  2. //创建图片的实例 
  3. $dst = imagecreatefromstring(file_get_contents($dst_path)); 
  4.  
  5. //打上文字 
  6. $font = './simsun.ttc';//字体路径 
  7.  
  8. $black = imagecolorallocate($dst, 0x00, 0x00, 0x00);//字体颜色 
  9. imagefttext($dst, 13, 0, 20, 20, $black, $font, '快乐编程'); 
  10. //输出图片 
  11. list($dst_w, $dst_h, $dst_type) = getimagesize($dst_path); 
  12. switch ($dst_type) { 
  13.     case 1://GIF 
  14.         header('Content-Type: image/gif'); 
  15.         imagegif($dst); 
  16.         break; 
  17.     case 2://JPG 
  18.         header('Content-Type: image/jpeg'); 
  19.         imagejpeg($dst); 
  20.         break; 
  21.     case 3://PNG 
  22.         header('Content-Type: image/png'); 
  23.         imagepng($dst); 
  24.         break; 
  25.     default
  26.         break; 
  27. imagedestroy($dst);  

新创建一张图片,然后打印文字水印:

 
  1. // imagecreatefromstring 
  2. // imageCreateFromPng  Create a new image from file or URL   创建图片对象 
  3.  
  4. // Create a 300x100 image,新创建一张图片 
  5. $im = imagecreatetruecolor(500, 300); 
  6.  
  7. // set color 
  8. $red = imagecolorallocate($im, 0xFF, 0x00, 0x00); 
  9. $black = imagecolorallocate($im, 0x00, 0x00, 0x00); 
  10.  
  11. // Make the background red 
  12. // function imagefilledrectangle ($image, $x1, $y1, $x2, $y2, $color) {} 
  13. imagefilledrectangle($im, 0, 0, 300, 100, $red); 
  14.  
  15. // Path to our ttf font file 
  16. $font_file = './font/Arial.ttf'
  17.  
  18.  
  19. // imagefttext ($image, $size, $angle, $x, $y, $color, $fontfile, $text, $extrainfo = null ) 
  20. // Draw the text 'PHP Manual' using font size 13 
  21. imagefttext($im, 13, 0, 150, 50, $black, $font_file, 'PHP Manual'); 
  22.  
  23. // Output image to the browser 
  24. header('Content-Type: image/png'); 
  25.  
  26. imagepng($im); 
  27. imagedestroy($im); 

二、图片水印

图片水印就是将一张图片加在另外一张图片上,主要使用gd库的imagecopy和imagecopymerge。

 
  1. $dst_path = 'myimage.jpg'
  2. $src_path = 'http://www.logodashi.com/FileUpLoad/inspiration/636003768803214440.jpg'
  3. //创建图片的实例 
  4. $dst = imagecreatefromstring(file_get_contents($dst_path)); 
  5. $src = imagecreatefromstring(file_get_contents($src_path)); 
  6. //获取水印图片的宽高 
  7. list($src_w, $src_h) = getimagesize($src_path); 
  8. //将水印图片复制到目标图片上,最后个参数50是设置透明度,这里实现半透明效果 
  9. imagecopymerge($dst, $src, 10, 10, 0, 0, $src_w, $src_h, 30); 
  10.  
  11. //如果水印图片本身带透明色,则使用imagecopy方法 
  12. // imagecopy($dst, $src, 10, 10, 0, 0, $src_w, $src_h); 
  13.  
  14. //输出图片 
  15. list($dst_w, $dst_h, $dst_type) = getimagesize($dst_path); 
  16. switch ($dst_type) { 
  17.     case 1://GIF 
  18.         header('Content-Type: image/gif'); 
  19.         imagegif($dst); 
  20.         break; 
  21.     case 2://JPG 
  22.         header('Content-Type: image/jpeg'); 
  23.         imagejpeg($dst); 
  24.         break; 
  25.     case 3://PNG 
  26.         header('Content-Type: image/png'); 
  27.         imagepng($dst); 
  28.         break; 
  29.     default
  30.         break; 
  31. imagedestroy($dst); 
  32. imagedestroy($src);  

效果图:

三、其他有关图像处理的函数

 
  1. /* 
  2.  *返回图像的大小及图像类型 
  3. // Get the size of an image 
  4. $size = getimagesize("http://image18-c.poco.cn/mypoco/myphoto/20160901/20/17857099520160901203311082.jpg?750x956_120"); 
  5.  
  6. print_r($size); 
  7.  
  8.  
  9. // 打印结果 
  10. Array 
  11.     [0] => 750 
  12.     [1] => 956 
  13.     [2] => 2 
  14.     [3] => width="750" height="956" 
  15.     [bits] => 8 
  16.     [channels] => 3 
  17.     [mime] => image/jpeg 
  18.  
  19. */ 
  20.  
  21.  
  22. /** 
  23.  * imagecopy — 拷贝图像的一部分 
  24.  */ 
  25.  
  26. // bool imagecopy ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h ) 
  27. // 将 src_im 图像中坐标从 src_x,src_y 开始,宽度为 src_w,高度为 src_h 的一部分拷贝到 dst_im 图像中坐标为 dst_x 和 dst_y 的位置上。 
  28.  
  29.  
  30.  
  31. /* 
  32.  * 
  33.  * http://php.net/manual/zh/function.imagecopymerge.php 
  34.  *imagecopymerge — 拷贝并合并图像的一部分 
  35.  *bool imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct ) 
  36.  * 
  37.  * 
  38.  */  



作者:Corwien

来源:51CTO

相关文章
拿php写个原生增删改查案例出来(提供全部代码+sql)
拿php写个原生增删改查案例出来(提供全部代码+sql)
拿php写个原生增删改查案例出来(提供全部代码+sql)
|
3月前
|
PHP
使用PHP实现随机调用图片
使用PHP实现随机调用图片
76 0
使用PHP实现随机调用图片
|
4月前
|
小程序 PHP 数据安全/隐私保护
php图片加水印函数
这里分享下php给图片加水印的几个自定义函数 给图片加水印首先需要开启GD库。 用到的php函数是imagecopymerge () 和 imagecopy () imagecopymerge 函数可以支持两个图像叠加时,设置叠加的透明度
46 0
|
1月前
|
PHP 开发者 UED
PHP 中的异常处理:提高代码健壮性的关键
【2月更文挑战第28天】在 PHP 开发中,异常处理是确保应用程序稳定性和可靠性的重要环节。本文将深入探讨 PHP 异常的概念、类型及其处理机制,并通过实例演示如何有效地捕获和处理异常,以增强代码的健壮性和用户体验。
|
1月前
|
存储 PHP Apache
使用CFimagehost源码搭建无需数据库支持的PHP免费图片托管私人图床
使用CFimagehost源码搭建无需数据库支持的PHP免费图片托管私人图床
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
php案例:用代码的方式创建目录+文件+写入数据(都由你定)
php案例:用代码的方式创建目录+文件+写入数据(都由你定)
php案例:用代码的方式创建目录+文件+写入数据(都由你定)