PHP 使用GD库合成带二维码的海报步骤以及源码实现

在做微信项目开发过程中,经常会遇到图片合成的问题,比如将用户的二维码合成到宣传海报中,那么,遇到这种情况,利用PHP的GD库也是很容易实现的,实现步骤如下

准备好素材:

1、二维码原图qrcode.png  尺寸430*430:

2、海报原图test.png  尺寸680*1074:

步骤以及源码:

一、首先是将二维码缩小为206*206,因为使用微信公众号接口获取的二维码尺寸为430*430,图片有点大,所以要缩小成206*206的(此处单位都是px,下面默认也是px)

  //已生成二维码路径
$avatarUrl = '\qrcode.png';
//海报路径
$img = '\test.jpg';
//1、将微信二维码缩小至206*206,默认是430
$thumb = imagecreatetruecolor(206,206); //创建一个新的画布(缩放后的),从左上角开始填充透明背景
$img_content = imagecreatefromjpeg(getcwd().$avatarUrl);//获取图片资源
//dump($img_content);
imagecopyresampled($thumb, $img_content, 0, 0, 0, 0, 206, 206, 430, 430);//核心函数,改变图片大小
$file_name = "\qrcode_1.png";
imagepng($thumb,getcwd().$file_name);//将图片资源保存到qrcode_1.png中

二、此时在当前目录就会生成一个206*206的以qrcode_1.png命名的图片:,然后将缩小的二维码图片合成到海报中

 1  //2、将缩小的二维码合成到海报中
$imgs = imagecreatefromjpeg(getcwd().$img);
imagecopy($imgs, $thumb, 237, 589, 0, 0, 206, 206);//核心函数:复制图片资源到另一图片资源中
//imagecopy($imgd,$imgw,$x,$y,0,0, $wwidth,$wheight);
//$save="image".$dtype;
//保存到服务器
$f_file_name = "\last.png";
imagepng($imgs,getcwd().$f_file_name); //保存
imagedestroy($imgs);
imagedestroy($thumb);//销毁图片资源

此时,最终的合成已经完成,可以查看last.png图片是否符合要求:(其实,细看还是没有完全对好,这就是尺寸计算有问题,稍微修正一下就好)

最后需要注意的是:

1、GD库的imagecreatefrom函数要和图片真实格式对应,比如图片是png格式,则使用imagecreatefrompng(),如果是jpg格式,则使用imagecreatefromjpeg(),切不要以为图片是以.png结尾就一定是png格式的

2、可以使用php自带的getimagesize()函数来获取图片的真正格式

 //获取图片大小及类型
$arr = getimagesize(getcwd().$avatarUrl);
dump($arr);die;

执行结果为:

 array(7) {
[0] => int(430) //图片宽度像素值
[1] => int(430) //图片高度像素值
[2] => int(2) //图片的类型,返回数字,其中1为gif,2为jpg,3为png,等等
[3] => string(24) "width="430" height="430""
["bits"] => int(8)
["channels"] => int(1)
["mime"] => string(10) "image/jpeg" //图片的mime信息
}

3、获取图片资源的时候,要通过绝对路径获取,相对路径是获取不到的

最新文章

  1. c#程序中对密码进行加密的方法
  2. 【转】Microsoft .NET Framework 3.5 sp1 安装速度慢,快速离线安装的方法
  3. Node.js -- Router模块中有一个param方法
  4. Microsoft Dynamics CRM 前瑞开发
  5. AOJ - 2224 Save your cat(最小生成树)
  6. Java基础知识强化之IO流笔记27:FileInputStream读取数据一次一个字节数组byte[ ]
  7. for update被锁定解锁
  8. JGraph
  9. mysql中pager命令妙用
  10. A Game of Thrones(0) - PROLOGUE
  11. CSS继承性+层叠性+盒子+浮动
  12. 【转】jQuery Validate验证框架详解
  13. Zabbix实战-简易教程(4)--Server端安装
  14. MySQL性能调优——锁定机制与锁优化分析
  15. linux 远程 telnet
  16. minSdkVersion
  17. 11-Python操作excel
  18. druid配置oracle遇到: 未找到要求的 FROM 关键字 errorCode 923, state 42000
  19. hdu 5956 The Elder
  20. Java信号量Semaphore

热门文章

  1. js笔记 标签: javascript 2016-08-01 13:30 75人阅读 评论(0) 收藏
  2. postgraSql支持View可以修改的两种方法。
  3. ZT————pull push mode
  4. whoami
  5. js 对象数组删除和查找的方法
  6. itext-2.1.7.jar
  7. JSTL1.2学习总结
  8. Cloud Tool 小探索
  9. 17、配置嵌入式servlet容器(1)
  10. IDEA+MAVEN构建一个webapp骨架项目(解决一直卡在downloading plugins for问题)