zoukankan      html  css  js  c++  java
  • PHP 使用GD库合成带二维码的海报步骤以及源码实现

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

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

    准备好素材:

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

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

     

    步骤以及源码:

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

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

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

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

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

    最后需要注意的是:

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

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

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

    执行结果为:

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

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

  • 相关阅读:
    qemu-img check命令详解
    cinder migrate基础内容-1
    lvm常用指令
    ceph 快照,克隆
    http请求工作流程
    Python 生成二维码
    python 往 elasticsearch 存入数据时,文档字段类型问题注意事项
    python 往 elasticsearch 存入数据,然后通过kinaba 检索分析
    git 删除某次提交
    git 强制回滚【覆盖】远程 源码库
  • 原文地址:https://www.cnblogs.com/cyfblogs/p/9963309.html
Copyright © 2011-2022 走看看