依赖jar包

二维码的实现有多种方法,比如 Google 的 zxing 和日本公司的 QrCode,本文以 QrCode 为例。

QrCode.jar:https://pan.baidu.com/s/1c1PYV0s

加入本地 maven:

mvn install:install-file -Dfile=QRCode.jar -DgroupId=QRCode -DartifactId=QRCode -Dversion=3.0 -Dpackaging=jar

注意,QrCode 实现的二维码不能很好的支持中文。

实例源码

import com.swetake.util.Qrcode;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
/**
* 1、QrCode 生成二维码图片
* 2、生成带有 logo 的二维码图片
* Created by zhengbinMac on 2017/4/27.
*/
public class QrCodeTest {
/**
* 生成二维码 Buffered
* @param content 二维码内容
* @return
*/
public static BufferedImage QrcodeImage(String content) {
// 二维码宽度
int width = 140;
// 二维码高度
int height = 140; try {
Qrcode qrcode = new Qrcode(); // 设置二维码的排错率 'L':7%,'M':15%,'Q':25%,'H':30%
qrcode.setQrcodeErrorCorrect('M');
qrcode.setQrcodeEncodeMode('B'); // 设置二维码的尺寸,尺寸越大,可存储的信息量越大
qrcode.setQrcodeVersion(7);
// 设置图片的尺寸、格式
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 绘制二维码的图片
Graphics2D graphics2D = bufferedImage.createGraphics();
// 设置背景颜色
graphics2D.setBackground(Color.WHITE);
// 创建二维码的矩形区域
graphics2D.clearRect(0, 0, width, height); // 设置二维码图片的颜色值
graphics2D.setColor(Color.BLACK);
// 二维码生成点阵的偏移量
int pixoff = 2;
// 获取二维码内容的字节数组,并设置编码
byte[] contentBytes = content.getBytes("UTF-8");
// 输出二维码
if (contentBytes.length > 0 && contentBytes.length < 200) { // 如果二维码内容在规定长度内
boolean[][] codeOut = qrcode.calQrcode(contentBytes);
for (int i = 0;i < codeOut.length;i++) {
for (int j = 0;j < codeOut.length;j++) {
if (codeOut[j][i]) {
graphics2D.fillRect(j*3+pixoff, i*3+pixoff, 3, 3);
}
}
}
}
graphics2D.dispose();
bufferedImage.flush();
return bufferedImage;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 在已有的二维码图片加上logo图片
* @param twodimensioncodeImg 二维码图片文件
* @param logoImg logo图片文件
* @return
*/
public static BufferedImage encodeImgLogo(File twodimensioncodeImg,File logoImg){
BufferedImage twodimensioncode = null;
try{
if(!twodimensioncodeImg.isFile() || !logoImg.isFile()){
System.out.println("输入非图片");
return null;
}
//读取二维码图片
twodimensioncode = ImageIO.read(twodimensioncodeImg);
//获取画笔
Graphics2D g = twodimensioncode.createGraphics();
//读取logo图片
BufferedImage logo = ImageIO.read(logoImg);
//设置二维码大小,太大,会覆盖二维码,此处20%
int logoWidth = logo.getWidth(null) > twodimensioncode.getWidth()*3 /10 ? (twodimensioncode.getWidth()*3 /10) : logo.getWidth(null);
int logoHeight = logo.getHeight(null) > twodimensioncode.getHeight()*3 /10 ? (twodimensioncode.getHeight()*3 /10) : logo.getHeight(null);
// 确定二维码的中心位置坐标,设置logo图片放置的位置
int x = (twodimensioncode.getWidth() - logoWidth) / 2;
int y = (twodimensioncode.getHeight() - logoHeight) / 2;
//开始合并绘制图片
g.drawImage(logo, x, y, logoWidth, logoHeight, null);
g.drawRoundRect(x, y, logoWidth, logoHeight, 15 ,15);
//logo边框大小
g.setStroke(new BasicStroke(2));
//logo边框颜色
g.setColor(Color.WHITE);
g.drawRect(x, y, logoWidth, logoHeight);
g.dispose();
logo.flush();
twodimensioncode.flush();
}catch(Exception e){
System.out.println("二维码绘制logo失败");
}
return twodimensioncode;
} /**
* 生成图片文件
* @param bufferedImage 图片 buffered
* @param imgPath 图片路径
*/
public static void writeImage(BufferedImage bufferedImage, String imgPath) {
// 生成二维码的图片
File file = new File(imgPath);
try {
ImageIO.write(bufferedImage, "png", file);
} catch (IOException e) {
e.printStackTrace();
}
} public static void main(String[] args) {
// 生成二维码
BufferedImage qrCode = QrcodeImage("http://zhengbin.cnblogs.com");
writeImage(qrCode, "/Users/zhengbinMac/Documents/qrcode/qecode2.png"); // 生成带有图片logo的二维码
File qrcode = new File("/Users/zhengbinMac/Documents/qrcode/qecode2.png");
File logo = new File("/Users/zhengbinMac/Documents/qrcode/logo.png");
BufferedImage logoQrcode = encodeImgLogo(qrcode, logo);
writeImage(logoQrcode, "/Users/zhengbinMac/Documents/qrcode/logQrcode.png");
}
}

二维码效果

下面打开微信扫一下吧

超链接二维码: 普通文本内容二维码:

注意,超链接前需要加 ' http:// ',否则显示普通文本内容

二维码的解析

/**
* 解析二维码
*/
public static String decodeImg(String imgPath) {
File imgFile = new File(imgPath);
if (imgFile == null) {
return null;
}
BufferedImage bufferedImage;
String content = null;
try {
bufferedImage = ImageIO.read(imgFile);
QRCodeDecoder decoder = new QRCodeDecoder();
// decode 方法入参为 QRCodeImage,其是接口声明,需要实现该接口
content = new String(decoder.decode(new CodeImg(bufferedImage)), "UTF-8");
} catch (IOException e) {
e.printStackTrace();
}
return content;
}
/**
* 实现 QRCodeImage 接口
*/
static class CodeImg implements QRCodeImage{
private BufferedImage image;
public CodeImg(BufferedImage image) {
super();
this.image = image;
}
@Override
public int getWidth() { return image.getWidth(); }
@Override
public int getHeight() { return image.getHeight(); }
@Override
public int getPixel(int x, int y) { return image.getRGB(x, y); }
public BufferedImage getImage() { return image; }
public void setImage(BufferedImage image) { this.image = image; }
}

Java生成微信二维码及logo二维码的更多相关文章

  1. java 生成微信的二维码 工具类

    package com.app.wii.util; import java.io.File;import java.io.FileInputStream;import java.io.FileOutp ...

  2. vue生成条形码/二维码/带logo二维码

    条形码:https://blog.csdn.net/dakache11/article/details/83749410 //安装 cnpm install @xkeshi/vue-barcode / ...

  3. Java生成微信分享海报【基础设计】

    前言 微信后台生成海报一般都是一个模板写死,然后就完事了,过了不久让修改个模板,就又要看半天,还要考虑是否重新复制一份改一改,越来越多的重复代码,全在一个图片类里,然后就越来越乱.这两天用设计模式处理 ...

  4. java 生成二维码、可带LOGO、可去白边

      1.准备工作 所需jar包: JDK 1.6: commons-codec-1.11.jar core-2.2.jar javase-2.2.jar JDK 1.7: commons-codec- ...

  5. java 生成二维码后叠加LOGO并转换成base64

      1.代码 见文末推荐 2.测试 测试1:生成base64码 public static void main(String[] args) throws Exception { String dat ...

  6. 【java】google的zxing架包生成二维码和读取二维码【可带文字和logo】

    承接RC4生成不重复字符串的需求之后,因为优惠码要方便用户使用的缘故,所以思来想去,觉得还是直接生成二维码给用户直接扫比较实用,也不用用户专门记录冗长的优惠码编号. ================= ...

  7. Java生成带logo 的二维码

    这个工具类主要实现了两点功能: 1. 生成任意文链接的二维码. 2. 在二维码的中间加入图像. 主要实现步骤: 第一步: 导入QR二维码3.0 版本的core包和一张jpg图片(logo). core ...

  8. QRCode 扫描二维码、扫描条形码、相册获取图片后识别、生成带 Logo 二维码、支持微博微信 QQ 二维码扫描样式

    目录 功能介绍 常见问题 效果图与示例 apk Gradle 依赖 布局文件 自定义属性说明 接口说明 关于我 功能介绍 根据之前公司的产品需求,参考 barcodescanner 改的,希望能帮助到 ...

  9. Java生成名片式的二维码源码分享

    世界上25%的人都有拖延症——但我觉得这统计肯定少了,至少我就是一名拖延症患者.一直想把“Java生成名片式(带有背景图片.用户网络头像.用户昵称)的二维码”这篇博客分享出来,但一直拖啊拖,拖到现在, ...

随机推荐

  1. Druid数据库连接池源码分析

    上一篇文章重点介绍了一下Java的Future模式,最后意淫了一个数据库连接池的场景.本想通过Future模式来防止,当多个线程同时获取数据库连接时各自都生成一个,造成资源浪费.但是忽略了一个根本的功 ...

  2. IntelliJ Idea 2017 注册码 免费激活方法

    1. 到网站 http://idea.lanyus.com/ 获取注册码. 2.弹窗中选择最后一个页面license server,填入下面一种链接即可: http://idea.iteblog.co ...

  3. String、StringBuilder和StringBuffer类

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  4. Requests模块 HTTP for Humans

    安装方式 $ pip install requests 基本GET请求(headers参数 和 parmas参数) 1.最基本的GET请求可以直接用get方法 response = requests. ...

  5. IntelliJ IDEA 热部署插件 JRebel 安装激活及使用

    JRebel对个人用户免费使用,但是要使用Facebook账号把信息完整填写之后才能获取Lisense,登陆Facebook官网二种方案:①修改本地hosts文件:②使用VPNFQ 以下是二种方案的解 ...

  6. centos6.5安装禅道

    1.安装禅道需要安装以下环境 mysql php 5 apache 2 2.安装命令 1.安装mysql yum install mysql mysql-server 2.安装apache yum i ...

  7. Web前端开发好学吗?谈谈一位学姐的前端工程师之路

    我的第一篇博客....... 我是一名工科女,因高考失利与理想的院校擦肩而过,从而选择了机电专业.毕业后找工作时才发现机电专业的工作并不太适合我.我的父母也支持我转专业求职,但这个过程有时会让我迷茫. ...

  8. JSP和JavaBean总结

    JSP JSP全名为Java Server Pages,即java服务器页面,其根本是一个简化的Servlet设计.它是在传统的网页HTML文件中插入Java代码,从而形成JSP文件. JSP注释分为 ...

  9. bzoj 3932: [CQOI2015]任务查询系统

    Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si ...

  10. 3、debian8安装和处理

    本博文仅作本人操作过程的记录,留作备忘.自强不息 QQ1222698 本文写于2016年1月10日09:35:45,首先向debian的创始人Ian Murdock表示沉痛惦念! http://bai ...