分享一下利用phpqrcode二维码生成类库和imagecopymerge函数制拼合(镶嵌、合并、水印)图片经验

利用 phpqrcode 二维码生成类库和 imagecopymerge 函数制作带二维码的图片

首先引用phpqrcode类库

  • 下载phpqrcode类库

    下载地址就不提供了,百度一搜一大把;
    
  • 新建php文件用于创建二维码

    请注意看(每段中文后面都会有一定的代码示例)
    比如:新建文件 qrcode.php
    之后在文件中引入phpqrcode类库 代码演示 
    include('../phpqrcode/phpqrcode.php'); 
    而后就到了设置二维码的链接地址了
    $url = 'http://www.baidu.com';
    接着设置二维码的容错级别,何为容错级别?通俗点就是容错级别百分比越高,就越容易识别,下面是三种容错级别:
    L(QR_ECLEVEL_L,7%),M(QR_ECLEVEL_M,15%),Q(QR_ECLEVEL_Q,25%),H(QR_ECLEVEL_H,30%);
    按照效果排序依次是  H -> Q -> M -> L
    所以,就直接用 H 代码示例:
    $errorCorrectionLevel = 'H';//容错级别 
    而后继续设置生成二维码图片的大小
    $matrixPointSize = 7;//图片大小慢慢自己调整,只要是int就行
    设置生成二维码的图片名称,博主用了5为随机数+时间戳生成文件名,为了防止文件名重复相互覆盖。。
    QR = rand(10000,99999).time().".png";
    最后就到了生成二维码啦!
    直接调用ORcode::png()就行,带上刚才设置好的参数。最后的这个参数*2*是代表白边的宽度。
    QRcode::png($url, $QR, $errorCorrectionLevel, $matrixPointSize, 2); 
    
  • 如果你想在二维码中间放个LOGO那么你就继续看!

    首先,引用一张图片(you company LOGO)
    $logo = './images/logo.png';
    而后为了程序的完整性,简单的判断一下。也许某些童鞋不要LOGO的,注意看下面的代码,博主注释的都比较清楚的。
    if ($logo !== FALSE) { 
    $QR = imagecreatefromstring(file_get_contents($QR)); 
    $logo = imagecreatefromstring(file_get_contents($logo)); 
    $QR_width = imagesx($QR);//二维码图片宽度 
    $QR_height = imagesy($QR);//二维码图片高度 
    $logo_width = imagesx($logo);//logo图片宽度 
    $logo_height = imagesy($logo);//logo图片高度 
    $logo_qr_width = $QR_width / 5; 
    $scale = $logo_width/$logo_qr_width; 
    $logo_qr_height = $logo_height/$scale; 
    $from_width = ($QR_width - $logo_qr_width) / 2; 
    //重新组合图片并调整大小 
    imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, 
    $logo_qr_height, $logo_width, $logo_height); 
        } 
  • 最后直接输出图像即可

    还是老样子,我们给图片来个名字;这次用6为随机数+时间戳
    $QRM = rand(100000,999999).time().".png";
    imagepng($QR, $QIMG);
    而后输出图像 echo '<img src="'.$QIMG.'">'; 
    
  • 整个带logo的二维码生成就完成了。如果还要拼合在其他图像上就继续接着看!(文章结尾有整个项目的代码,记得点赞!)

imagecopymerge函数制拼合(镶嵌,合并)图片 同样适合水印之类的

  • 首先还是设置图片,底图和上面的覆盖图

    $dst_path = 'a.png';//底图
    $src_path = $QIMG;//覆盖图,我们就继续用上面的那张图QIMG
  • 创建图片的实例

    $dst = imagecreatefromstring(file_get_contents($dst_path));
    $src = imagecreatefromstring(file_get_contents($src_path));
  • 获取覆盖图片的宽高

    list($src_w, $src_h) = getimagesize($src_path);
  • 将图片复制到目标图片(底图)上,最后个参数是设置透明度(50为半透明,100为不透明,自己随意设置即可),这里实现不透明效果,两个20是控制图片坐标位置,自己慢慢调整

    imagecopymerge($dst, $src, 20, 20, 0, 0, $src_w, $src_h, 100);
  • 如果水印图片本身带透明色,则使用imagecopy方法

    imagecopy($dst, $src, 10, 10, 0, 0, $src_w, $src_h);//博主的不是透明的,所以不用这段~用下面的
  • 生成图片

    list($dst_w, $dst_h, $dst_type) = getimagesize($dst_path);
  • 而后用switch判断一下图片的类型

switch ($dst_type) {
        case 1://GIF
            header('Content-Type: image/gif');
            imagegif($dst);
            break;
        case 2://JPG
            header('Content-Type: image/jpeg');
            imagejpeg($dst);
            break;
        case 3://PNG
            header('Content-Type: image/png');
            imagepng($dst);
            break;
        default:
            break;
    }
  • 最后将图片打印出来

    imagedestroy($dst);
    imagedestroy($src);
    

整个程序的完整代码,伸手党们!记得点赞打赏收藏等等等等!

include('../phpqrcode/phpqrcode.php'); 
$url = 'http://www.baidu.com'; //二维码内容
$errorCorrectionLevel = 'H';//容错级别 
$matrixPointSize = 7;//生成图片大小 
//生成二维码图片 
$QR = rand(10000,99999).time().".png";
QRcode::png($url, $QR, $errorCorrectionLevel, $matrixPointSize, 2); 
$logo = '../images/logo.png';//准备好的logo图片
//生成时间戳处理覆盖图片防止权限的存在
// $op = time();
// $QR = 'qrcode.png';//已经生成的原始二维码图 
if ($logo !== FALSE) { 
    $QR = imagecreatefromstring(file_get_contents($QR)); 
    $logo = imagecreatefromstring(file_get_contents($logo)); 
    $QR_width = imagesx($QR);//二维码图片宽度 
    $QR_height = imagesy($QR);//二维码图片高度 
    $logo_width = imagesx($logo);//logo图片宽度 
    $logo_height = imagesy($logo);//logo图片高度 
    $logo_qr_width = $QR_width / 5; 
    $scale = $logo_width/$logo_qr_width; 
    $logo_qr_height = $logo_height/$scale; 
    $from_width = ($QR_width - $logo_qr_width) / 2; 
    //重新组合图片并调整大小 
    imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, 
    $logo_qr_height, $logo_width, $logo_height); 
} 
//输出图片 
$QIMG = rand(100000,999999).time().".png";
imagepng($QR, $QIMG); 

$dst_path = 'a.png';//底图
$src_path = $QIMG;//覆盖图

//创建图片的实例
$dst = imagecreatefromstring(file_get_contents($dst_path));
$src = imagecreatefromstring(file_get_contents($src_path));
//获取覆盖图图片的宽高
list($src_w, $src_h) = getimagesize($src_path);
//将覆盖图复制到目标图片上,最后个参数100是设置透明度(100是不透明),这里实现不透明效果,两个20是覆盖图坐标位置
imagecopymerge($dst, $src, 20, 20, 0, 0, $src_w, $src_h, 100);
//如果覆盖图图片本身带透明色,则使用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://GIF
        header('Content-Type: image/gif');
        imagegif($dst);
        break;
    case 2://JPG
        header('Content-Type: image/jpeg');
        imagejpeg($dst);
        break;
    case 3://PNG
          header('Content-Type: image/png');
        imagepng($dst);
        break;
    default:
        break;
    }
imagedestroy($dst);
imagedestroy($src);
源代码理解不了的,请看上面的文章,我都写的比较清楚,代码里面也注释了~遇到问题解决不了请百度,实在不行就留言给博主,博主会第一时间回复你!

大功告成,博主要看巴萨打拉斯帕尔马斯了!但愿我梅老板能再继续进逆天任意球!

okey bye see you!

    原文作者:Pink
    原文地址: https://segmentfault.com/a/1190000008123333
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞