免费二维码生成途径非常多!比如比较有名的草料二维码,如果只是简单的使用,用它就足够了。但是如果想大规模的生成,那就不太合适了。再者很多工具都没办法在二维码中加入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"]=""
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"]="";
$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请求,就可以使用上述方法生成二维码。

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

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

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

    随着移动互联网的发展,二维码应用非常普遍,各大商场,饭店,水果店 基本都有二维码的身影,那么ios中怎么生成二维码呢? 下面的的程序演示了快速生成二维码的方法: 在ios里面要生成二维码,需要借助一个 ...

  2. 微信小程序开发——使用第三方插件生成二维码

    需求场景: 小程序中指定页面需要根据列表数据生成多张二维码. 实现方案: 鉴于需要生成多张二维码,可以将生成二维码的功能封装到组件中,直接在页面列表循环中调用就好了.也可以给组件添加slot,在页面调 ...

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

    h5通过jquery和qrcode在线生成二维码 首先我们需要下载一个qrcode.js文件,然后依次引入jquery和qrcode文件. 1.创建一个输入框以便做演示使用: <input id ...

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

    1.生成小程序二维码功能 直接请求相应的链接.传递相应的参数 以生成商铺的付款码为例: var shopsId = e.ShopsId //付款码的参数 var codeModel = new fun ...

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

    1.生成小程序二维码功能 直接请求相应的链接.传递相应的参数 以生成商铺的付款码为例: var shopsId = e.ShopsId //付款码的参数 var codeModel = new fun ...

  6. AJ学IOS 之二维码学习,快速生成二维码

    AJ分享,必须精品 二维码是一项项目中可能会用到的,iOS打开相机索取二维码的速度可不是Android能比的...(Android扫描二维码要来回来回晃...) 简单不多说,如何把一段资料(网址呀,字 ...

  7. 使用Python第三方库生成二维码

    本文主要介绍两个可用于生成二维码的Python第三方库:MyQR和qrcode. MyQR的使用: 安装: pip install MyQR 导入: from MyQR import myqr imp ...

  8. 从Scratch到Python——Python生成二维码

    # Python利用pyqrcode模块生成二维码 import pyqrcode import sys number = pyqrcode.create('从Scratch到Python--Pyth ...

  9. Python 创建本地服务器环境生成二维码

    一. 需求 公司要做一个H5手机端适配页面,因技术问题所以H5是外包的,每次前端给我们源码,我们把源码传到服务器让其他人访问看是否存在bug,这个不是很麻烦吗?有人说,可以让前端在他们的服务器上先托管 ...

随机推荐

  1. jQuery——jQuery对象与DOM对象

    1.jQuery对象与DOM对象的区别 通过jQuery方法包装后的对象,是一个类数组对象.它与DOM对象完全不同,唯一相似的是它们都能操作DOM. 通过jQuery处理DOM的操作,可以让开发者更专 ...

  2. springboot mybatis 的SQL异常不输出错误到控制台问题排查

    项目中使用springboot集成 mybatis,运行过程中查询SQL列在表中不存在,但系统不输出任何错误到控制台 但SQL是打印的,只是没有任何异常信息 将SQL复制出来到数据库中运行,才发现错误 ...

  3. ansible模块补充

    1.fetch模块, 将远程机器上的文件拉取到本地,以ip或者主机名生成目录,并保留原来的目录结构,与copy模块的功能相反. 主要参数 : dest  --  目标地址 src -- 源地址 例子 ...

  4. STM32串口接收中断——基于HAL库

    写在前面 最近需要使用一款STM32L4系列的芯片进行开发,需要学习使用HAL库.在进行串口中断使用的时候遇到了一些小麻烦,写下解决方案供大家参考. 1.UART相关的头文件引用错误 由于本人直接使用 ...

  5. python 图像识别的小应用

    前些天看见了几个有趣的python项目,在自己实际测试和理解后贴一下代码. https://www.shiyanlou.com/courses/589/labs/1964/document 算法主要逻 ...

  6. 洛谷P1341 无序字母对【欧拉路】【dfs】

    题目:https://www.luogu.org/problemnew/show/P1341 题意:给定n对字母对,要求构造一个个数为n+1的字符串,使得每一个字母对都在里面出现过. 思路:这种题目都 ...

  7. Vue项目创建build打包后可修改的配置文件

    需要一个配置文件,能在项目打包(build)时不被打包,方便修改,同时项目刷新时读取改配置. 实现方法如下: 1.在项目的static目录下创建project.config.json文件(名称随意,建 ...

  8. Java中通过Array.sort()对数组从大到小排序

    package com.itheimajavase; import java.util.Arrays; import java.util.Comparator; public class Day01 ...

  9. 一些有用的dll

    1.生成excel工具- EPPlus EPPlus.dll 2.生成word工具 - OpenXml DocumentFormat.OpenXml.dll 3.生成条形码工具 -  ZXing zx ...

  10. trie树的应用;

    链接:https://ac.nowcoder.com/acm/contest/920/B来源:牛客网 定义一张图的生成链是原图的一棵生成树,且这棵树退化成一条链.我们称一条生成链是原图的最小生成链,当 ...