java代码二维码解析 JAVA识别二维码

如何使摄像头扫描二维码,然后解析二维码 java源码 zxing

import com.google.zxing.common.BitMatrix;

成都创新互联公司基于成都重庆香港及美国等地区分布式IDC机房数据中心构建的电信大带宽,联通大带宽,移动大带宽,多线BGP大带宽租用,是为众多客户提供专业乐山服务器托管报价,主机托管价格性价比高,为金融证券行业服务器托管,ai人工智能服务器托管提供bgp线路100M独享,G口带宽及机柜租用的专业成都idc公司。

import javax.imageio.ImageIO;

import java.io.File;

import java.io.OutputStream;

import java.io.IOException;

import java.awt.image.BufferedImage;

public final class MatrixToImageWriter {

private static final int BLACK = 0xFF000000;

private static final int WHITE = 0xFFFFFFFF;

private MatrixToImageWriter() {}

public static BufferedImage toBufferedImage(BitMatrix matrix) {

int width = matrix.getWidth();

int height = matrix.getHeight();

BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

for (int x = 0; x width; x++) {

for (int y = 0; y height; y++) {

image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);

}

}

return image;

}

public static void writeToFile(BitMatrix matrix, String format, File file)

throws IOException {

BufferedImage image = toBufferedImage(matrix);

if (!ImageIO.write(image, format, file)) {

throw new IOException("Could not write an image of format " + format + " to " + file);

}

}

public static void writeToStream(BitMatrix matrix, String format, OutputStream stream)

throws IOException {

BufferedImage image = toBufferedImage(matrix);

if (!ImageIO.write(image, format, stream)) {

throw new IOException("Could not write an image of format " + format);

}

}

}

java zxing解析二维码用了哪些技术

二维码的生成与解析。有多种途径。我选择用大品牌,google老大的zxing。

gitHub链接是(我用的3.0.0,已经是nio了)

Java代码 收藏代码

// 其中输出图像和读取图像的类在core包

MultiFormatReader

MultiFormatWriter

// 生成矩阵的类在javase的包里

MatrixToImageWriter

pom.xml中的配置为

Xml代码 收藏代码

project xmlns="" xmlns:xsi=""

xsi:schemaLocation=" "

modelVersion4.0.0/modelVersion

groupIdcom.shihy/groupId

artifactIdqrcode/artifactId

version0.0.1-SNAPSHOT/version

packagingjar/packaging

nameqrcode/name

url;/url

properties

project.build.sourceEncodingUTF-8/project.build.sourceEncoding

/properties

dependencies

dependency

groupIdcom.google.zxing/groupId

artifactIdcore/artifactId

version3.0.0/version

/dependency

dependency

groupIdcom.google.zxing/groupId

artifactIdjavase/artifactId

version3.0.0/version

/dependency

dependency

groupIdjunit/groupId

artifactIdjunit/artifactId

version4.10/version

/dependency

dependency

groupIdcom.alibaba/groupId

artifactIdfastjson/artifactId

version1.1.29/version

/dependency

/dependencies

/project

生成图像与解析图像的测试工具类:

Java代码 收藏代码

package com.polysaas.edu.qrcode;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import java.nio.file.FileSystems;

import java.nio.file.Path;

import java.util.HashMap;

import java.util.Map;

import javax.imageio.ImageIO;

import org.junit.Test;

import com.alibaba.fastjson.JSONObject;

import com.google.zxing.BarcodeFormat;

import com.google.zxing.Binarizer;

import com.google.zxing.BinaryBitmap;

import com.google.zxing.DecodeHintType;

import com.google.zxing.EncodeHintType;

import com.google.zxing.LuminanceSource;

import com.google.zxing.MultiFormatReader;

import com.google.zxing.MultiFormatWriter;

import com.google.zxing.NotFoundException;

import com.google.zxing.Result;

import com.google.zxing.WriterException;

import com.google.zxing.client.j2se.BufferedImageLuminanceSource;

import com.google.zxing.client.j2se.MatrixToImageWriter;

import com.google.zxing.common.BitMatrix;

import com.google.zxing.common.HybridBinarizer;

public class QRCodeTest {

/**

* 生成图像

*

* @throws WriterException

* @throws IOException

*/

@Test

public void testEncode() throws WriterException, IOException {

String filePath = "D://";

String fileName = "zxing.png";

JSONObject json = new JSONObject();

json.put(

"zxing",

"");

json.put("author", "shihy");

String content = json.toJSONString();// 内容

int width = 200; // 图像宽度

int height = 200; // 图像高度

String format = "png";// 图像类型

MapEncodeHintType, Object hints = new HashMapEncodeHintType, Object();

hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");

BitMatrix bitMatrix = new MultiFormatWriter().encode(content,

BarcodeFormat.QR_CODE, width, height, hints);// 生成矩阵

Path path = FileSystems.getDefault().getPath(filePath, fileName);

MatrixToImageWriter.writeToPath(bitMatrix, format, path);// 输出图像

System.out.println("输出成功.");

}

/**

* 解析图像

*/

@Test

public void testDecode() {

String filePath = "D://zxing.png";

BufferedImage image;

try {

image = ImageIO.read(new File(filePath));

LuminanceSource source = new BufferedImageLuminanceSource(image);

Binarizer binarizer = new HybridBinarizer(source);

BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);

MapDecodeHintType, Object hints = new HashMapDecodeHintType, Object();

hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");

Result result = new MultiFormatReader().decode(binaryBitmap, hints);// 对图像进行解码

JSONObject content = JSONObject.parseObject(result.getText());

System.out.println("图片中内容: ");

System.out.println("author: " + content.getString("author"));

System.out.println("zxing: " + content.getString("zxing"));

System.out.println("图片中格式: ");

System.out.println("encode: " + result.getBarcodeFormat());

} catch (IOException e) {

e.printStackTrace();

} catch (NotFoundException e) {

e.printStackTrace();

}

}

}

如何使用java开发二维码代码

1: 使用SwetakeQRCode在Java项目中生成二维码

下载地址

或着

这个是日本人写的,生成的是我们常见的方形的二维码

可以用中文

如:5677777ghjjjjj

2: 使用BarCode4j生成条形码和二维码

BarCode4j网址:

barcode4j是使用datamatrix的二维码生成算法,为支持qr的算法

datamatrix是欧美的标准,qr为日本的标准,

barcode4j一般生成出来是长方形的

如:88777alec000yan

这个博客这方面说的挺清楚的:

3:zxing

zxing 这个是google的

下载地址

Java代码:

import java.io.File;

import java.util.Hashtable;

import com.google.zxing.BarcodeFormat;

import com.google.zxing.EncodeHintType;

import com.google.zxing.MultiFormatWriter;

import com.google.zxing.client.j2se.MatrixToImageWriter;

import com.google.zxing.common.BitMatrix;

import com.google.zxing.qrcode.QRCodeWriter;

public class QRCodeEvents {

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

String text = "你好";

int width = 100;

int height = 100;

String format = "png";

Hashtable hints= new Hashtable();

hints.put(EncodeHintType.CHARACTER_SET, "utf-8");

BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height,hints);

File outputFile = new File("new.png");

MatrixToImageWriter.writeToFile(bitMatrix, format, outputFile);

}

}

4:google chart api就有实现二维码的方法

利用这个api,使用google appengine进行实现。

5:JS生成二维码

使用jQuery-qrcode生成二维码

先简单说一下jquery-qrcode,这个开源的三方库(可以从 获取),

qrcode.js 是实现二维码数据计算的核心类,

jquery.qrcode.js 是把它用jquery方式封装起来的,用它来实现图形渲染,其实就是画图(支持canvas和table两种方式)

支持的功能主要有:

Js代码:

text : "" //设置二维码内容

Js代码:

render : "canvas",//设置渲染方式

width : 256, //设置宽度

height : 256, //设置高度

typeNumber : -1, //计算模式

correctLevel : QRErrorCorrectLevel.H,//纠错等级

background : "#ffffff",//背景颜色

foreground : "#000000" //前景颜色

使用方式非常简单

Js代码:

jQuery('#output').qrcode({width:200,height:200,correctLevel:0,text:content});

经过简单实践,

使用canvas方式渲染性能还是非常不错的,但是如果用table方式,性能不太理想,特别是IE9以下的浏览器,所以需要自行优化一下渲染table的方式,这里就不细述了。

其实上面的js有一个小小的缺点,就是默认不支持中文。

这跟js的机制有关系,jquery-qrcode这个库是采用 charCodeAt() 这个方式进行编码转换的,

而这个方法默认会获取它的 Unicode 编码,一般的解码器都是采用UTF-8, ISO-8859-1等方式,

英文是没有问题,如果是中文,一般情况下Unicode是UTF-16实现,长度2位,而UTF-8编码是3位,这样二维码的编解码就不匹配了。

解决方式当然是,在二维码编码前把字符串转换成UTF-8,具体代码如下:

function utf16to8(str) {

var out, i, len, c;

out = "";

len = str.length;

for(i = 0; i len; i++) {

c = str.charCodeAt(i);

if ((c = 0x0001) (c = 0x007F)) {

out += str.charAt(i);

} else if (c 0x07FF) {

out += String.fromCharCode(0xE0 | ((c 12) 0x0F));

out += String.fromCharCode(0x80 | ((c 6) 0x3F));

out += String.fromCharCode(0x80 | ((c 0) 0x3F));

} else {

out += String.fromCharCode(0xC0 | ((c 6) 0x1F));

out += String.fromCharCode(0x80 | ((c 0) 0x3F));

}

}

return out;

}

使用java如何运用混淆算法生成二维码

需要的jar: qrcode.jar和 qrcode_swetake.jar,以及一个工具类,下面有。

package com.sbm.wll.image;

/**

* Java 生成二维码,解析二维码

*/

import java.awt.Color;

import java.awt.Graphics2D;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import javax.imageio.ImageIO;

import com.swetake.util.Qrcode;

import jp.sourceforge.qrcode.QRCodeDecoder;

import jp.sourceforge.qrcode.exception.DecodingFailedException;

public class Image {

/**

* 生成二维码图片文件

*

* @param content

* 存储内容

* @param imgPath

* 图片路径

* @param imgType

* 图片类型

* @param size

* 二维码尺寸

*/

public void encoderQRCode(String content, String imgPath, String imgType, int size) {

try {

BufferedImage bufImg = this.qRCodeCommon(content, imgType, size);

File imgFile = new File(imgPath);

// 生成二维码QRCode图片

ImageIO.write(bufImg, imgType, imgFile);

System.out.println("二维码生成成功,路径:" + imgPath);

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 生成二维码,流输出

*/

public void encoderQRCode(String content, OutputStream output, String imgType, int size) {

try {

BufferedImage bufImg = this.qRCodeCommon(content, imgType, size);

// 生成二维码QRCode图片

ImageIO.write(bufImg, imgType, output);

System.out.println("二维码生成成功,流输出");

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 生成二维码(QRCode)图片的基本方法

*/

private BufferedImage qRCodeCommon(String content, String imgType, int size) {

BufferedImage bufImg = null;

try {

Qrcode qrcodeHandler = new Qrcode();

// 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小

qrcodeHandler.setQrcodeErrorCorrect('M');

qrcodeHandler.setQrcodeEncodeMode('B');

// 设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大

qrcodeHandler.setQrcodeVersion(size);

// 获得内容的字节数组,设置编码格式

byte[] contentBytes = content.getBytes("utf-8");

// 图片尺寸

int imgSize = 67 + 12 * (size - 1);

bufImg = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE_INT_RGB);

Graphics2D gs = bufImg.createGraphics();

// 设置背景颜色

gs.setBackground(Color.WHITE);

gs.clearRect(0, 0, imgSize, imgSize);

// 设定图像颜色 BLACK

gs.setColor(Color.BLACK);

// 设置偏移量,不设置可能导致解析出错

int pixoff = 2;

// 输出内容 二维码

Java如何用代码生成二维码

引用spire.barcode.jar包

//创建BarcodeSettings对象

BarcodeSettings settings = new BarcodeSettings();

//设置条码类型为

QR二维码settings.setType(BarCodeType.QR_Code);       

//设置二维码数据

settings.setData("Hello 123456789");

//设置二维码显示数据

settings.setData2D("Hello 123456789");     

//设置数据类型

settings.setQRCodeDataMode(QRCodeDataMode.Alpha_Number);

//设置二维码模型宽度

settings.setX(1.0f);

//设置二维码纠错级别settings.setQRCodeECL(QRCodeECL.H);

//创建BarCodeGenerator实例

BarCodeGenerator barCodeGenerator = new BarCodeGenerator(settings);

//根据settings生成图像数据,保存至BufferedImage

BufferedImage bufferedImage = barCodeGenerator.generateImage();

//将图片数据保存为PNG格式

ImageIO.write(bufferedImage, "png", new File("QRCode.png"));

本文名称:java代码二维码解析 JAVA识别二维码
文章来源:https://www.cdcxhl.com/article0/docgpio.html

成都网站建设公司_创新互联,为您提供定制网站做网站企业网站制作网站营销全网营销推广App开发

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

绵阳服务器托管