zoukankan      html  css  js  c++  java
  • 利用phpqrcode二维码生成类库和imagecopymerge函数制拼接图片的经验(一)

    前期准备

    1、利用phpqrcode生成二维码:

    原理分析:

    下载下来的类文件是一个压缩包,包含很多文件和演示程序,我们只需要里边的phpqrcode.php

    这一个文件就可以生成二维码了,它是一个多个类的集合文件,我们需要用到里边的QRcode类png()方法:

    复制代码
    public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false) 
            {
                $enc = QRencode::factory($level, $size, $margin);
                return $enc->encodePNG($text, $outfile, $saveandprint=false);
            }
        /**
         * 
         * 参数详解
         * 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
         * 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
         * 第3个参数$level:容错级别,默认为L。
         *      可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%)。
         *      这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别
         * 第4个参数$size:控制生成图片的大小,默认为4;
         * 第5个参数$margin:控制生成二维码的空白区域大小;
         * 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
         * 
         */
    复制代码

      使用示例:

    复制代码
    require_once("./phpqrcode.php");
    function creatQrcode(){
        //设置二维码的链接地址
        $url = "http://www.baidu.com";
        //设置二维码的容错级别
        /*
         * 容错级别:容错级别百分比越高,就越容易识别,容错级别:
         * 按照效果排序依次是  H -> Q -> M -> L
         */
        $errorCorrectionLevel = 'H';    
        //设置生成二维码图片的大小
        $matrixPointSize = 7;
        //设置生成二维码的图片名称(路径名称根据项目需求而定)
        $filename = "test.png";
        QRcode::png($url, $filename, $errorCorrectionLevel, $matrixPointSize, 1);
        //以上已经生成了二维码了(同级目录下的test.png)
    }
    creatQrcode();
    复制代码

    2、如果要在生成的二维码中间放置logo的话:

    复制代码
    <?php
    //引入phpqrcode类库
    require_once("./phpqrcode.php");
    function creatQrcode(){
        //设置二维码的链接地址
        $url = "http://www.baidu.com";
        //设置二维码的容错级别
        /*
         * 容错级别:容错级别百分比越高,就越容易识别,容错级别:
         * 按照效果排序依次是  H -> Q -> M -> L
         */
        $errorCorrectionLevel = 'H';    
        //设置生成二维码图片的大小
        $matrixPointSize = 7;
        //设置生成二维码的图片名称
        $filename = "test.png";
        QRcode::png($url, $filename, $errorCorrectionLevel, $matrixPointSize, 1);
        //以上已经生成了二维码了(同级目录下的test.png)
        $logo = './img/logo.png';
        $QR = $filename;
        $QRlogo = './img/qrlogo.png';
        if(file_exists($logo)){
            // 函数:imagecreatefromstring():创建一块画布,并从字符串中的图像流新建一副图像
            $QR = imagecreatefromstring(file_get_contents($QR));        //目标图象连接资源。
            $logo = imagecreatefromstring(file_get_contents($logo));     //源图象连接资源。
            // php函数:imagesx(resource image):获取图像宽度
            // PHP函数:imagesy(resource image):获取图像高度
            $QR_width = imagesx($QR);
            $QR_height = imagesy($QR);
            $logo_width = imagesx($logo);//logo图片宽度 
            $logo_height = imagesy($logo);//logo图片高度 
    
            $logo_qr_width = $QR_width / 5;   //组合之后logo的宽度(占二维码的1/5)
            $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
            $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
            $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
    
            //重新组合图片,并调整大小
            /**
             * 函数 imagecopyresampled():将一幅图像中的一块正方形区域拷贝到另一个图像中,平滑地插入像素值,因此,尤其是,减小了图像的大小而仍然保持了极大的清晰度。参数详解
             *
             * bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
             *
             * dst_image 目标图象连接资源。
             * src_image 源图象连接资源。
             * dst_x 目标 X 坐标点。
             * dst_y 目标 Y 坐标点。
             * src_x 源的 X 坐标点。
             * src_y 源的 Y 坐标点。
             * dst_w 目标宽度。
             * dst_h 目标高度。
             * src_w 源图象的宽度。
             * src_h 源图象的高度。
             */
            imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
            // PHP函数:imagepng ( resource image [, string filename] ):以 PNG 格式将图像输出到浏览器或文件
            imagepng($QR,$QRlogo);
            echo '<image src="'.$QRlogo.'"/>';
        }
    }
    creatQrcode();
    复制代码

    3、如果加了logo的二维码要放在一张海报上的话:

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

    复制代码
    <?php
    //引入phpqrcode类库
    require_once("./phpqrcode.php");
    function creatQrcode(){
        //设置二维码的链接地址
        $url = "http://www.baidu.com";
        //设置二维码的容错级别
        /*
         * 容错级别:容错级别百分比越高,就越容易识别,容错级别:
         * 按照效果排序依次是  H -> Q -> M -> L
         */
        $errorCorrectionLevel = 'H';    
        //设置生成二维码图片的大小
        $matrixPointSize = 7;
        //设置生成二维码的图片名称
        $filename = "test.png";
        QRcode::png($url, $filename, $errorCorrectionLevel, $matrixPointSize, 1);
        //以上已经生成了二维码了(同级目录下的test.png)
    
        //————————————————————————————————————————————————————————————————
        //二维码上添加logo
        $logo = './img/logo.png';
        $QR = $filename;
        $QRlogo = './img/qrlogo.png';
        if(file_exists($logo)){
            // 函数:imagecreatefromstring():创建一块画布,并从字符串中的图像流新建一副图像
            $QR = imagecreatefromstring(file_get_contents($QR));        //目标图象连接资源。
            $logo = imagecreatefromstring(file_get_contents($logo));     //源图象连接资源。
            // php函数:imagesx(resource image):获取图像宽度
            // PHP函数:imagesy(resource image):获取图像高度
            $QR_width = imagesx($QR);
            $QR_height = imagesy($QR);
            $logo_width = imagesx($logo);//logo图片宽度 
            $logo_height = imagesy($logo);//logo图片高度 
    
            $logo_qr_width = $QR_width / 5;   //组合之后logo的宽度(占二维码的1/5)
            $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
            $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
            $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
    
            //重新组合图片,并调整大小
            imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
            // PHP函数:imagepng ( resource image [, string filename] ):以 PNG 格式将图像输出到浏览器或文件
            imagepng($QR,$QRlogo);
    
    
    
            //——————————————————————————————————————————
            // 加了logo的二维码放在海报之类的背景图上面
    
            $dst_path = './img/xuexi.jpg';     //底图
            $src_path = $QRlogo;     //覆盖图,我们就继续用上面的那张图QRlogo
    
            //创建图片实例
            $dst = imagecreatefromstring(file_get_contents($dst_path));
            $src = imagecreatefromstring(file_get_contents($src_path));
            //获取覆盖图的宽高
            list($src_w, $src_h) = getimagesize($src_path);
            /**
             *
             * PHP函数:imagecopymerge()/imagecopy()
             *
             * bool imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )
             * 将 src_im 图像中坐标从 src_x,src_y 开始,宽度为 src_w,高度为 src_h 的一部分拷贝到 dst_im 图像中坐标为 dst_x 和 dst_y 的位置上。两图像将根据 pct 来决定合并程度,其值范围从 0 到 100。当 pct = 0 时,实际上什么也没做,当为 100 时对于调色板图像本函数和 imagecopy() 完全一样,它对真彩色图像实现了 alpha 透明。
             *
             */
            imagecopymerge($dst, $src, 20, 120, 0, 0, $src_w, $src_h, 100);
            list($dst_w, $dst_h) = getimagesize($dst_path);
            imagepng($dst,'./img/aaa.png');
            imagedestroy($dst);
            imagedestroy($src);
        }
    }
    creatQrcode();
    复制代码
  • 相关阅读:
    FZU 2150 Fire Game
    POJ 3414 Pots
    POJ 3087 Shuffle'm Up
    POJ 3126 Prime Path
    POJ 1426 Find The Multiple
    POJ 3278 Catch That Cow
    字符数组
    HDU 1238 Substing
    欧几里德和扩展欧几里德详解 以及例题CodeForces 7C
    Codeforces 591B Rebranding
  • 原文地址:https://www.cnblogs.com/zmdComeOn/p/11713162.html
Copyright © 2011-2022 走看看