java、python、golang等开发语言如何快速生成二维码?

免费二维码生成途径非常多!比如比较有名的草料二维码,如果只是简单的使用,用它就足够了。但是如果想大规模的生成,那就不太合适了。再者很多工具都没办法在二维码中加入logo(像微信二维码一样)。

接下来,我就说说如何快速的、高质量的生成一个可高度定制的二维码。

二维码的编码算法是公开的,这就意味着大部分的开发语言都可以动图生成。但是在二维码应用如此广泛的今天,还自己去造轮子,如果不是傻,那就是正真的技术极客了。

Java有开源的二维码生成库:com.google.zxing,这是谷歌大佬为android开源的,这个库不可谓不强大,但是坑的一逼,谁用谁知道呀
python是出了名的第三方库多,二维码生成怎么少得了它。比如:myqr、qrcode等
其它语言不熟悉,不做讨论...

我既然说的是任何开发语言都能生成二维码,除开每种语言独立实现外。还有一种方案,那就是调用现成的API去生成二维码。对于想简单使用、想控制开发成本或者是使用一些小众语言的场合,使用API不失为一种好策略。

下面我推荐一个二维码免费生成的API,来自“小葱计算
详细说明文档:https://www.xiaocongjisuan.com/show/api/14

API传参注意事项:

  • appKey:接口唯一标识,在用户后台->应用中心->我的接口查看
  • openId:平台id,注册后系统自动生成,在用户后台->用户中心->账户信息查看

为啥推荐这个接口呢?因为只有它生成的二维码是可以高度定制的,比如:logo、二维码的颜色、二维码的背景颜色、二维码的尺寸,边距等等,详细设置如下图所示:

还有一些返回值的说明,具体参照上面的api说明文档吧!接下来,我就贴一下一些常用开发语言的使用DEMO。

java版本:

package com.xiaocongjisuan.module.example;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;

public class Application {

     public static final String DEF_CHATSET = "UTF-8";
     public static final int DEF_CONN_TIMEOUT = 30000;
     public static final int DEF_READ_TIMEOUT = 30000;
     public static String userAgent =  "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36";

     //配置您申请的appKey和openId
     public static final String APP_KEY ="yours";
     public static final String OPEN_ID ="yours";

     //将map型转为请求参数型
     public static String urlEncode(Map<String,Object> params) {

        if(params==null){return "";};

        StringBuilder sb = new StringBuilder();
        for (Map.Entry<String,Object> i : params.entrySet()) {
            try {
                sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue()+"","UTF-8")).append("&");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }
        String r=sb.toString();
        if(r.endsWith("&")){
            r = r.substring(0,r.length()-1);
        }
        return r;
     }

     /**
     *
     * @param requestUrl 请求地址
     * @param params 请求参数
     * @param method 请求方法
     * @return 请求结果
     * @throws Exception
     */
     public static String requestContent(String requestUrl, Map<String,Object> params,String method) throws Exception {

        HttpURLConnection conn = null;
        BufferedReader reader = null;
        String rs = null;
        try {

            //组装请求链接
            StringBuffer sb = new StringBuffer();

            if(method!=null&&method.equalsIgnoreCase("get")){
                requestUrl = requestUrl+"?"+urlEncode(params);
            }

            //默认get
            URL url = new URL(requestUrl);
            conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");

            if(method!=null&&method.equalsIgnoreCase("post")){
                 conn.setRequestMethod("POST");
                 conn.setDoOutput(true);
                 conn.setDoInput(true);
            }

            //参数配置
            conn.setRequestProperty("User-agent", userAgent);
            conn.setUseCaches(false);
            conn.setConnectTimeout(DEF_CONN_TIMEOUT);
            conn.setReadTimeout(DEF_READ_TIMEOUT);
            conn.setInstanceFollowRedirects(false);
            conn.connect();

            if (params!= null && method.equalsIgnoreCase("post")) {
                try {
                    DataOutputStream out = new DataOutputStream(conn.getOutputStream());
                    out.writeBytes(urlEncode(params));
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            //读取数据
            InputStream is = conn.getInputStream();
            reader = new BufferedReader(new InputStreamReader(is, DEF_CHATSET));
            String strRead = null;
            while ((strRead = reader.readLine()) != null) {
                sb.append(strRead);
            }
            rs = sb.toString();

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                reader.close();
            }
            if (conn != null) {
                conn.disconnect();
            }
        }
        return rs;
    }

    public static void main(String[] args) throws Exception{

        String domain="http://api.xiaocongjisuan.com/";
        String servlet="develop/qrcode/create";
        String method="get";

        String requestUrl=domain+servlet;
        Map<String,Object> params=new HashMap<String,Object>();
        params.put("appKey",APP_KEY);
        params.put("openId",OPEN_ID);

        //变动部分
        params.put("text","我是最可爱的小伙子");
        params.put("w",400);
        params.put("m",1);
        params.put("color","000000");
        params.put("bgColor","ffffff");

        String result=requestContent(requestUrl,params,method);
        System.out.println(result);
    }
}

python版本:

# -*- coding: utf-8 -*-
# flake8: noqa
__author__ = ‘wukong‘

import urllib
from urllib import urlencode

#配置您申请的appKey和openId
app_key="***"
open_id="***"

"""
request_url 请求地址
params 请求参数
method 请求方法

"""
def request_content(request_url,params,method):
    params = urlencode(params)

    if method and method.lower() =="get":
        f = urllib.urlopen("%s?%s" % (request_url, params))
    else:
        f = urllib.urlopen(request_url, params)

    content = f.read()
    print content

def main():

    domain="http://api.xiaocongjisuan.com/";
    servlet="develop/qrcode/create"
    method="get"
    request_url=domain+servlet

    #字典
    params ={}
    params["appKey"]=app_key
    params["openId"]=open_id

    #变动部分
    params["text"]="我是最可爱的小伙子"
    params["w"]=400
    params["m"]=1
    params["color"]="000000"
    params["bgColor"]="ffffff"

    request_content(request_url,params,method)

if __name__ == ‘__main__‘:
    main()

php版本:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<?php

/**
 * @author
 * @copyright 2019
 */

header("content-type:text/html;charset=utf-8");         //设置编码

//配置您申请的appKey和openId
$app_key = "***";
$open_id = "***";

/**
$url 请求地址
$params 请求参数
$ispost 请求方法
*/

function http_curl($url,$params=false,$ispost=false){

    $httpInfo = array();
    $ch = curl_init();

    curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 );
    curl_setopt( $ch, CURLOPT_USERAGENT , "xiaocongjisuan");
    curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT , 60 );
    curl_setopt( $ch, CURLOPT_TIMEOUT , 60);
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER , true );

    if( $ispost )
    {
        curl_setopt( $ch , CURLOPT_POST , true );
        curl_setopt( $ch , CURLOPT_POSTFIELDS , $params );
        curl_setopt( $ch , CURLOPT_URL , $url );
    }
    else
    {
        if($params){
            curl_setopt( $ch , CURLOPT_URL , $url.‘?‘.$params );
        }else{
            curl_setopt( $ch , CURLOPT_URL , $url);
        }
    }

    $response = curl_exec( $ch );
    if ($response === FALSE) {
        //echo "cURL Error: " . curl_error($ch);
        return false;
    }
    $httpCode = curl_getinfo( $ch , CURLINFO_HTTP_CODE );
    $httpInfo = array_merge( $httpInfo , curl_getinfo( $ch ) );
    curl_close( $ch );

    return $response;
}

function main(){

    global $app_key;
    global $open_id;

    $domain="http://api.xiaocongjisuan.com/";
    $servlet="develop/qrcode/create";
    $method="get";

    $url=$domain."".$servlet;

    $params[‘appKey‘]=$app_key;
    $params[‘openId‘]=$open_id;

    //变动部分
    $params["text"]="我是最可爱的小伙子";
    $params["w"]=400;
    $params["m"]=1;
    $params["color"]="000000";
    $params["bgColor"]="ffffff";

    //编码转换
    foreach ($params as $key=>$value) {
        $params[$key]=mb_convert_encoding($value, "UTF-8", "GBK");
    }

    $paramstring = http_build_query($params);
    $content = http_curl($url,$paramstring,true);

    return $content;
}

echo main();
?>

其它语言,可详细查看说明文档。其实说白了,只要能发送POST请求,就可以使用上述方法生成二维码。

上一个用上述方法生成的二维码图例吧

原文地址:https://www.cnblogs.com/Zhangps/p/11665882.html

时间: 2024-08-05 09:24:46

java、python、golang等开发语言如何快速生成二维码?的相关文章

IOS开发技巧快速生成二维码

随着移动互联网的发展,二维码应用非常普遍,各大商场,饭店,水果店 基本都有二维码的身影,那么ios中怎么生成二维码呢? 下面的的程序演示了快速生成二维码的方法: 在ios里面要生成二维码,需要借助一个框架:#import <CoreImage/CoreImage.h>  所有首先我们需要在我们的项目中引入这个框架 下面是核心代码: 准备工作:首先在storyboard里面添加一个UIImageView 然后脱线 到控制器里面 起名为imageView 然后再控制器的viewDidload里面写

在web页面上快速生成二维码的两种实用方法

二维码是桌面和移动端快速分享的高效手段之一,这里介绍两个不错的快速开发二维码的方法,和大家分享一下~~ 方法1:使用新浪提供的服务 这种方式简单快速,在服务端生成一个二维码的图片,兼容性比较好,你无需自己处理任何相关二维码的生成,只需要提供一端文字或者url即可,方法如下: <img src="http://qrcoder.sinaapp.com?t=http://www.gbtags.com"> 生成效果如下: 大家扫一扫就可以访问极客标签主站了~~ 方法2: 使用jQu

.NET开发微信小程序-生成二维码

1.生成小程序二维码功能 直接请求相应的链接.传递相应的参数 以生成商铺的付款码为例: var shopsId = e.ShopsId //付款码的参数 var codeModel = new function () { } codeModel.path = "pages/PageWxPay/PageWxPay?shopsId=" + shopsId codeModel.width = 430 codeModel.auto_color = false codeModel.line_co

h5开发app之在线生成二维码

h5通过jquery和qrcode在线生成二维码 首先我们需要下载一个qrcode.js文件,然后依次引入jquery和qrcode文件. 1.创建一个输入框以便做演示使用: <input id="text" type="text" value="http://www.baidu.com" style="width:80%" /> 2.创建一个div以用来放置二维码图片(div的id定义为“qrcode”): &l

猫猫学iOS之二维码学习,快速生成二维码

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243 二维码是一项项目中可能会用到的,iOS打开相机索取二维码的速度可不是Android能比的...(Android扫描二维码要来回来回晃...) 简单不多说,如何把一段资料(网址呀,字符串)变成二维码,直接上代码 步骤: 导入CoreImage框架 #import <CoreImage/CoreImage.h> 通过滤镜CIFilter生成二维码 #import

快速生成二维码

本篇讲述如何生成带自定义logo的二维码. 首选需要下载一个二维码包,这个在百度里搜一下,都有免费下的.下载后的到一个文件夹名为:phpqrcode .如要装载,请著名来源:http://blog.csdn.net/qq_22327455,谢谢.下面开始看代码. <?php header("Content-Type: text/html; charset=utf-8"); //调试时开启 error_reporting(E_ALL);  //调试时开启 include "

Java 骚操作--生成二维码

好久没发布博客了,今天发了一个Java工具类,突然发现草稿箱竟然还有以前的存货,一次性发了!!! 目录 1.二维码概念  2.二维码发展历史  3.二维码分类  4.二维码优缺点  5.QR Code  1.二维码又称  二维条码 (2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维码上)分布的黑白相间的图形记录数据符号信息的图形. 2二维码发展历史 1.20世纪20年代 约翰 科芒德实现邮政单据自动分拣方法, 2.1949年美国乔 伍德兰德 伯尼西尔沃发

java实现生成二维码

                                                     java实现生成二维码 二维码vs条形码 最大的区别就是:二维码具有容错功能,当二维码图片被遮挡一部分后,仍可以扫描出来.容错的原理是二维码在编码过程中进行了冗余,就像是123被编码成123123,这样只要扫描到一部分二维码图片,二维码内容还是可以被全部读到. 二维码容错率即是指二维码图标被遮挡多少后,仍可以被扫描出来的能力.容错率越高,则二维码图片能被遮挡的部分越多. 二维码容错率用字母表

java 生成 二维码 和jquery 生成二维码

生成二维码 Java 生成二维码: 思路为拿到jar 包知道里面的方法使用 Step one : 在https://github.com/zxing中下载(点击网页中名为 zxing 的a标签,跳转到源码页面,点击release 查看所有发布的源码,下载zip压缩文件 Step two:  解压文件后打开文件夹,将core包和javase包 中的com包拷贝到一java项目src目录下.右键导出 jar file  得到一个二维码开发的jar包 Step three: 进行二维码制作 impor