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、获取图片资源的时候,要通过绝对路径获取,相对路径是获取不到的

PHP 使用GD库合成带二维码的海报步骤以及源码实现的更多相关文章

  1. PHP 使用GD库合成带二维码和圆形头像的海报步骤以及源码实现

    PHP 使用GD库合成带二维码和圆形头像的海报步骤以及源码实现 之前记录过一篇文章,不过那只是简单将二维码合成到海报中去,这次还要合成头像,而且是圆形.所需要素材就不一一列举,直接代码吧 1.先获取用 ...

  2. iOS开发——iOS7(及以后版本) SDK自带二维码(含条形码)扫码、二维码生成

    本文转载至 http://www.cnblogs.com/leotangcn/p/4357907.html 现在很多APP都涉及了二维码扫码功能,这个功能简单实用,很多情况下用户乐于使用,现在本文带来 ...

  3. 二维码合成,将苹果和安卓(ios和android)合成一个二维码,让用户扫描一个二维码就可以分别下载苹果和安卓的应用

    因为公司推广的原因,没有合适的将苹果和安卓(ios和android)合成一个二维码的工具. 因为这个不难,主要是根据浏览器的UA进行判断,所以就自己开发了一个网站 网站名称叫:好推二维码  https ...

  4. C# 实现生成带二维码的专属微信公众号推广海报

    原文:C# 实现生成带二维码的专属微信公众号推广海报 很多微信公众号中需要生成推广海报的功能,粉丝获得专属海报后可以分享到朋友圈或发给朋友,为公众号代言邀请好友即可获取奖励的.海报自带渠道二维码,粉丝 ...

  5. Python的开源人脸识别库:离线识别率高达99.38%(附源码)

    Python的开源人脸识别库:离线识别率高达99.38%(附源码) 转https://cloud.tencent.com/developer/article/1359073   11.11 智慧上云 ...

  6. (二)一起学 Java Collections Framework 源码之 AbstractCollection

    . . . . . 目录 (一)一起学 Java Collections Framework 源码之 概述(未完成) (二)一起学 Java Collections Framework 源码之 Abs ...

  7. 利用phpqrcode二维码生成类库合成带logo的二维码并且用合成的二维码生成海报(二)

    前期准备 引入phpqrcode类库(下载地址:https://download.csdn.net/download/weixin_37557729/11891240:支持彩色二维码的下载地址:htt ...

  8. python库myqr生成二维码

    python中有一个好玩的库,不仅可以生成各种花色的二维码,还可以生成动态二维码. MyQR是一个能够生成自定义二维码的第三方库,可以根据需要生成普通二维码.带图片的艺术二维码,也可以生成动态二维码 ...

  9. 使用python3调用MyQR库生成动态二维码(附源代码)

    可生成普通二维码.带图片的艺术二维码(黑白与彩色).动态二维码(黑白与彩色). GitHub:https://github.com/sylnsfar/qrcode 中文版:https://github ...

随机推荐

  1. 我要为运维说一句,我们不是网管,好不!!Are you know?

    运维 运维,这里指互联网运维,通常属于技术部门,与研发.测试.系统管理同为互联网产品技术支撑的4大部门,这个划分在国内和国外以及大小公司间都会多少有一些不同. 一个互联网产品的生成一般经历的过程是:产 ...

  2. ElasticSearch之常用插件安装命令

    #head监控安装,推荐 bin/plugin -install mobz/elasticsearch-head #bigdesk集群状态,推荐 bin/plugin -install lukas-v ...

  3. fork: retry: Resource temporarily unavailable

    用户A打开文件描述符太多,超过了该用户的限制 修改用户可以打开的文件描述符数量 1.首先,用另一个用户B登录,修改/etc/security/limit.conf * soft nofile 6553 ...

  4. assert 的使用

    一直以来没分清什么时候该使用assert,什么时候该使用if.现在将其记录下来 assert 用于检查参数的合法性以及某个预期的结果等,assert只在debug模式中在在.assert是面向程序员的 ...

  5. Oracle三种链接方式的区别

    1 nested loops join--我们用设置statistics_level=all的方式来观察如下表连接语句的执行计划: --T2表被访问100次(驱动表访问1次,被驱动表访问100次)-- ...

  6. February 5 2017 Week 6 Sunday

    Prosperity discovers vice, adversity virtue. 得意时露瑕疵,逆境中见品质. Adversity will discover your virtue, not ...

  7. SqlParameter.Value = NULL 引发的数据库异常

    摘自:http://www.cnblogs.com/ccweb/p/3403492.html using (SqlCommand cmd = new SqlCommand()) { cmd.Conne ...

  8. [原]零基础学习SDL开发之在Android使用SDL2.0渲染PNG图片

    在上一篇文章我们知道了如何在android使用SDL2.0来渲染显示一张bmp图,但是如果是一张png或者一张jpg的图,那么还能显示成功么?答案是否定的 我们需要移植SDL_image库来支持除bm ...

  9. c++由string组成的struct初始化崩溃

    struct _UserInfo { string username; string password; string ip; string port; } _UserInfo str={}; 这样就 ...

  10. css3实现 两个点之间有一条线,循环运动

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...