需求:在一张背景图上添加二维码(带不同),并且个人名字,联系方式和个人头像。

思路:二维码和头像相当于往图片上添加图片,个人姓名和联系方式相当于玩图片上添加文字,这就是文字/图案水印了。思路就是上网百度!!

历经辛苦,找到一篇看起来可能会明白,简洁,简短的文章:(http://www.jb51.net/article/44829.htm)
//添加图片水印

$dst_path = 'dst.jpg';
$src_path = 'src.jpg';
//创建图片的实例
$dst = imagecreatefromstring(file_get_contents($dst_path));
$src = imagecreatefromstring(file_get_contents($src_path));
//获取水印图片的宽高
list($src_w, $src_h) = getimagesize($src_path);
//将水印图片复制到目标图片上,最后个参数50是设置透明度,这里实现半透明效果
imagecopymerge($dst, $src, 10, 10, 0, 0, $src_w, $src_h, 50);
//如果水印图片本身带透明色,则使用imagecopy方法
//imagecopy($dst, $src, 10, 10, 0, 0, $src_w, $src_h);
//输出图片
list($dst_w, $dst_h, $dst_type) = getimagesize($dst_path);
switch ($dst_type) {case 1://GIFheader('Content-Type: image/gif');imagegif($dst);break;case 2://JPGheader('Content-Type: image/jpeg');imagejpeg($dst);break;case 3://PNGheader('Content-Type: image/png');imagepng($dst);break;default:break;
}
imagedestroy($dst);
imagedestroy($src);

因为之前很少接触图片方面的需求,通过观察代码哈哈哈,发现添加【图片水印】的思路是这样的:
1.确定背景图和水印图,利用这两个图片创建两个实例,实例相当于一种图片资源,在图片上添加文字或者图片,就是对实例进行操作,根据图片文件格式选择创建实例的方式,如果图片是jpg格式,则使用imagecreatefromjpeg();如图中所示,也可以先用file_get_contents获取到图片的内容,然后用imagecreatefromstring()来根据图片内容创建实例;

2.确定水印图片的左顶点的坐标(x,y),和设计师确认一下摆放水印图片的位置,水平和垂直距离是多少,像素单位,如图中程序里面的10,10;再得到水印图片的宽和长,如程序中的srcw和src_w和src_h;

3.确定好各项参数后,需要把水印图片和背景图合在一起
//将水印图片复制到目标图片上,最后个参数50是设置透明度,这里实现半透明效果
imagecopymerge(dst,dst, src, 10, 10, 0, 0, srcw,src_w, src_h, 50);
//如果水印图片本身带透明色,则使用imagecopy方法
//imagecopy(dst,dst, src, 10, 10, 0, 0, srcw,src_w, src_h);

当imagecopymerge最后的设置透明度的参数为100的时候,就相当于imagecopy,当透明度为0,则相当于没有显示出水印图片

4.把水印加在背景图上后,可以直接显示出图片,也可以把修改的图片实例保存到文件上
这段代码就是根据图片的格式,选择相应的方法,把图片显示出来

list($dst_w, $dst_h, $dst_type) = getimagesize($dst_path);
switch ($dst_type) {case 1://GIFheader('Content-Type: image/gif');imagegif($dst);break;case 2://JPGheader('Content-Type: image/jpeg');imagejpeg($dst);break;case 3://PNGheader('Content-Type: image/png');imagepng($dst);break;default:break;
}

//保存到文件上
选择想要保存的格式,例如想把图片保存为jpg格式的文件,则imagejpeg(实例,保存路径);如imagejpeg($dst,’test.jpg’);

以上,添加图片水印完成。
弄完图片水印,就来研究一下【文字水印】。天真的我本来以为文字水印就是简单的文字,添加上去,没想到还是比较复杂的。。。

//添加文字水印

$dst_path = 'dst.jpg';
//创建图片的实例
$dst = imagecreatefromstring(file_get_contents($dst_path));
//打上文字
$font = './simsun.ttc';//字体
$black = imagecolorallocate($dst, 0x00, 0x00, 0x00);//字体颜色
imagefttext($dst, 13, 0, 20, 20, $black, $font, '快乐编程');
//输出图片
list($dst_w, $dst_h, $dst_type) = getimagesize($dst_path);
switch ($dst_type) {case 1://GIFheader('Content-Type: image/gif');imagegif($dst);break;case 2://JPGheader('Content-Type: image/jpeg');imagejpeg($dst);break;case 3://PNGheader('Content-Type: image/png');imagepng($dst);break;default:break;
}
imagedestroy($dst);

以上的代码是上面附加的文章链接里面的完整代码,天真的我以为,直接复制,粘贴!OK!完成!结果!不行!
试过其他的办法,发现其他的办法会导致乱码,中文你懂的,所以还是要使用imagefttext(),这个方法可以使用配置的字体,乱码问题就不会出现了。
参考以下这篇文章,修改了一下代码,可以用了!偶像!
http://www.uncletoo.com/html/application/808.html
以下代码测试可用(不同环境不一定哦)

header("Content-type:image/jpeg");
//对比一下,以下代码和以上代码的差别主要是这一行
imagealphablending($image, true);
//设置颜色,后三个数字参数是RGB
$white = imagecolorallocate($image, 255,255, 255);
//字体文件路径,simsun宋体
$font = './assets/simsun.ttc';//添加上姓名和联系方式,第二个参数设定font-size,第三个参数设定字体的阅读方向,0则为从左到右阅读,具体查一下PHP手册,第四和第五个参数则为文字水印的摆放坐标,第六是字体颜色,第七是字体样式,第八是文字内容
imagefttext($image, 17, 0, 388, 240, $white , $font, $name);
imagefttext($image, 17, 0, 388, 305, $white , $font, $phone);

对了,字体的文件从网上下载好,放到合适的路径使用哦。

以上添加图片和文字水印已经完成了,但是还有一个难点,需求里面包括了摆放个人的头像,而且头像需要裁剪成圆形头像。。。。没事!老铁!不要放弃!

搜了几个代码,有一个陷入死循环,有一个使用Imagick类,但是看到这位大哥的代码,不使用自带的类就写出来了,膜拜!上链接!
http://blog.csdn.net/sugang_ximi/article/details/30762421
通过观察大哥的代码,慢慢理解了他的思路,主要就是利用到了圆和正方形的关系,怎么说来着,我转换一下说法,大概是正方形的边长和圆的直径相等,那么该圆的圆心和正方形的中心为同一点。。。不知道怎么说啊,反正圆能被正方形嵌套。。。

而大哥的代码的逻辑又是什么呢?我的理解是,先用圆的直径为边长,画一个正方形,然后把头像嵌入到正方形里面,再把正方形减去圆形的四个角作处理,可透明也可适应背景色,毫无破绽!

所以当务之急是什么呢!!!就是找到圆的半径!通过与设计师沟通,得知用户的头像的圆形框是一个半径为50cm的圆!!

说实在的,好像我也没理解大哥的逻辑是什么样的,不过已经测试可用,我就直接用了,然后到了下班时间,我要去吃饭了。。。。

PHP实现图片加文字/图案水印相关推荐

  1. iOS修改图片尺寸和裁剪功能以及 图片上加图片 图片加文字(水印效果)

    1.修改图片尺寸 - (  UIImage  *)imageWithImageSimple:(  UIImage  *)image scaledToSize:(  CGSize  )newSize { ...

  2. PHP实现给图片加文字水印

    PHP实现给图片加文字水印 一.开发环境 1.Windows+Apache+MySQL+PHP的环境. 2.文本编辑器:Sublime. 二.主要技术 PHP+HTML+CSS 三.效果图与具体步骤 ...

  3. ASP.NET(C#)图片加文字、图片水印

    ASP.NET(C#)图片加文字.图片水印 ? 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 2 ...

  4. Java图片加文字水印

    Java图片加文字水印 import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.I ...

  5. 阿里云 OSS 对象存储 OSS 图片加文字水印

    阿里云 OSS 对象存储 实际开发需先阅读 阿里云 [OSS快速入门文档](https://help.aliyun.com/document_detail/31883.html?spm=5176.20 ...

  6. 图片加文字(批量水印 批量水印大师)

    图片加文字(批量水印 批量水印大师) 批量水印大师是一款好用的批量添加水印软件.三步操作即可轻松完成. 第一步: 添加图片 - 选择需要添加水印的图片文件. 第二步:水印设置 - 设置水印效果,所见即 ...

  7. 给图片加文字,加图片

    '''给图片加文字''' from PIL import Image, ImageDraw, ImageFontfile = 'C:\\Users\\14399\\Desktop\\new_1.png ...

  8. 视频图片加文字的二维码怎么做?教你在线制作二维码

    想要把视频.图片以及文字做成二维码的时候,要怎么操作呢?其实,方法非常的简单,只需要使用操作简单的二维码生成器(https://www.jzx.com/)就能够快速完成二维码制作的操作.下面,给大家分 ...

  9. PIL实现两张图片合成一张,和图片加文字

    PIL实现两张图片合成一张,和图片加文字 文章目录: 一.PIL实现两张图片合成一张 1.方法一: 2.方法二 二.图片添加文字 首先说明一下: (小姐姐是谁,是my sweetheart ,请勿使用 ...

  10. 图片加文字用什么软件?推荐这三款软件给你

    当你在生活中,拍了一些好看的风景照,想要分享给朋友时,却总是感觉照片上少了些什么,有些单调,这时怎么办呢?我们可以利用一些软件来给照片中的事物添加文字介绍,从而凸显出照片的主题,使其效果更佳.那图片加 ...

最新文章

  1. Python学习之序列
  2. 手写自己的MyBatis框架-支持注解配置SQL
  3. java bean id_在 JSP中使用JavaBean的标签是 ,其中 id的用途是 __________________学小易找答案...
  4. MIP 移动网页加速器视频教程全新发布
  5. Java 中的异常处理
  6. 目标跟踪学习之MDNet
  7. 对话MySQL之父:代码一次性完成才是优秀程序员
  8. 二叉树的遍历-C++
  9. android studio 上手使用 大水逼问题
  10. 卡巴斯基互联网安全套装KIS 2010 Beta汉化特别版下载(无需注册码)
  11. 南充十中高考2021成绩查询,2021年南充十中招办电话是多少?
  12. 搬运小视频为什么要修改MD5值?什么是MD5?
  13. Android程序打包安装过程
  14. 《秘密全在小动作上》读书笔记
  15. python打开json文件_python怎么读json文件
  16. Window系统上的Nacos安装与配置
  17. 禁用键盘上的某些按键
  18. Nagios nsca插件进程突然死掉
  19. 医学图像分割之Attention U-Net
  20. Python解决:当文件夹存在时清空文件夹,文件夹不存在时新建文件夹

热门文章

  1. ToString格式转换大全(1)
  2. python读取pdf提取文字和图片
  3. 【CMD】ping通ip
  4. 用线性探测法处理冲突时的散列表_案例
  5. 努比亚 Z17s (Nubia NX595J) 解锁BootLoader 并刷入recovery ROOT
  6. 清理git本地帐户信息
  7. 半功率点为啥是-3dB
  8. 网络安全----身份认证
  9. 如何长期且快乐的学习?
  10. 如果使用git克隆远程创库,pull提示Can‘t update master has no tracked branch