Java生成微信二维码及logo二维码

依赖jar包

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

实例源码

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:// ‘,否则显示普通文本内容

二维码的解析

...

时间: 2024-10-10 05:11:17

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

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

条形码:https://blog.csdn.net/dakache11/article/details/83749410 //安装 cnpm install @xkeshi/vue-barcode //main.js中引入 import VueBarcode from '@xkeshi/vue-barcode' Vue.component('barcode', VueBarcode) //vue文件中使用 <!-- 条形码 --> <barcode :value="barcod

java给微信发送get和post请求

现在做微信订阅号.微信公众号,微信企业号都需要开发者给微信服务器发送get或post请求.具体发送get或post请求源码如下: package com.ciji.utils; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.net.URL

Android 生成带Logo的二维码或普通的二维码,后续将会推出一个java exe二维码生成插件

前几天在做微信绑定的时候,利用 Google Zxing 完成了一系列项目需求,可能后续还会更进,做得更人性化,比如自定义二维码,自定义LOGO,单个二维码绑定硬件设备,绕过 官方API限制,达到扫一次绑定公众号的需要 这次就不贴代码了,另外我把生成和保存的代码都注释了,包括二维码内容的填充,保存地址,都有详细的标识,有时间就写一个java swing exe 插件给大家用,跨平台的那种, 就是不管你电脑里有没有装 java 都可以用的插件 这里我就不上代码了,上几个效果图给大家看看生成效果,然

Java生成带logo 的二维码

这个工具类主要实现了两点功能: 1. 生成任意文链接的二维码. 2. 在二维码的中间加入图像. 主要实现步骤: 第一步: 导入QR二维码3.0 版本的core包和一张jpg图片(logo). core包下载地址:http://central.maven.org/maven2/com/google/zxing/core/3.0.0/ 第二步: 新建一个Java project.将刚下载的core-3.0.0 jar 添加到项目依赖中. 具体步骤: 第三步: 新建两个类,分别是: BufferedI

二维码的功能、特点及使用Java生成带logo的二维码

二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的:在代码编制上巧妙地利用构成计算机内部逻辑基础的"0"."1"比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集:每个字符占有一定的宽度:具有一定的校验功能等.同时还具有对不同行的信息自动识

C# ZXing.Net生成二维码、识别二维码、生成带Logo的二维码(一)

一.ZXing.Net 源代码地址:http://zxingnet.codeplex.com/ 也可以使用Nuget包管理,添加如图: 说明:ZXing是一个开源Java类库用于解析多种格式的1D/2D条形码.目标是能够对QR编码.Data Matrix.UPC的1D条形码进行解码. 其提供了多种平台下的客户端包括:J2ME.J2SE和Android.现在也有了对应的.Net版本 二.生成二维码 将字符编码时可以指定字符格式:默认为ISO-8859-1英文字符集,但一般移动设备常用UTF-8字符

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

世界上25%的人都有拖延症——但我觉得这统计肯定少了,至少我就是一名拖延症患者.一直想把“Java生成名片式(带有背景图片.用户网络头像.用户昵称)的二维码”这篇博客分享出来,但一直拖啊拖,拖到现在,真应了苏格兰的那句谚语——“什么时候都能做的事,往往什么时候都不会去做.” 零.效果图 左上角为微信头像. 沉默王二是文字昵称. 附带URL为http://blog.csdn.net/qing_gee的二维码 还有指定的背景图. 使用场景: 点公众号的微信菜单“我的二维码”,然后展示一张名片式的二维

Java生成二维码解析二维码

package QrCode; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.imageio.ImageIO; import com.google.zxing.BarcodeFormat; imp

ZXing生成条形码、二维码、带logo二维码

采用的是开源的ZXing,Maven配置如下,jar包下载地址,自己选择版本下载,顺便推荐下Maven Repository <!-- https://mvnrepository.com/artifact/com.google.zxing/core --> <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version