`

二维码Encode Decode Demo

阅读更多
本帖演示代码由junboqi@cn.ibm.com原创,转载请注明出处,谢谢。

1. 二维码第三方包下载地址,该第三方包由日本QRCode开源组织提供:
http://pan.baidu.com/s/1gdrHcrh

2. 演示代码下载地址(作者原创):
http://pan.baidu.com/s/1jGGD2q6



3 源代码清单说明:
解码器:输入二维码图像数据,或者包含二维码图像数据的InputStream,输出解析好的字符数据。
EnhancedQRCodeDecoder.java
编码器:输入字符串,编码成二维码图像数据,可以根据自己的喜好保存成任意图片格式。
QRCodeEncoder.java
实现第三方接口标准的默认二维码图像类。
QRCodeImageDefult.java
编码解码演示。
QRCodeDemo.java
一个图形化界面,可以调整各自参数的二维码演示,考虑到内容较多,读者可以点击上方的下载地址,自行下载运行。内含源代码zip包。
qrcodeDemo.jar
QRCodeUI.java

4.部分源代码明细
EnhancedQRCodeDecoder.java
package home.ibm.tony.qrcode;

import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;

import javax.imageio.ImageIO;

import jp.sourceforge.qrcode.QRCodeDecoder;
import jp.sourceforge.qrcode.data.QRCodeImage;
import jp.sourceforge.qrcode.exception.DecodingFailedException;

public class EnhancedQRCodeDecoder extends QRCodeDecoder {

	public byte[] decode(InputStream input) throws DecodingFailedException,
			IOException {
		QRCodeImageDefult image = new QRCodeImageDefult(ImageIO.read(input));
		return super.decode(image);
	}

	public String decodeToString(QRCodeImage qrCodeImage)
			throws DecodingFailedException, UnsupportedEncodingException {
		return new String(super.decode(qrCodeImage), "utf-8");

	}

	public String decodeToString(InputStream input) throws DecodingFailedException, IOException {
		return new String(decode(input));
	}
}


QRCodeEncoder.java
package home.ibm.tony.qrcode;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.UnsupportedEncodingException;

import com.swetake.util.Qrcode;

public class QRCodeEncoder {

	private Color bgColor;
	private Qrcode configure;
	private Color fgColor;
	private int margin;
	private int pixelSize;
 


	public QRCodeEncoder() {
		setDefault();
		bgColor = Color.WHITE;
		fgColor = Color.BLACK;
		pixelSize = 5;
		margin = 2;
	}

	public BufferedImage encode(String content) throws UnsupportedEncodingException {

		if(content == null || content.length() == 0 || content.length() > 256)
		{
			content = "http://ieqq.iteye.com/blog/2114077";
		}
		byte[] bstr = content.getBytes("UTF-8");
		boolean[][] result = new boolean[0][0];
		result = configure.calQrcode(bstr);
		int imageSize = result.length * pixelSize + margin * 2;

		BufferedImage bi = new BufferedImage(imageSize, imageSize,
				BufferedImage.TYPE_INT_RGB);
		Graphics2D g = bi.createGraphics();
		g.setBackground(bgColor); // 背景颜色
		g.clearRect(0, 0, imageSize, imageSize);
		g.setColor(fgColor); // 条码颜色

		for (int i = 0; i < result.length; i++) {
			for (int j = 0; j < result.length; j++) {
				if (result[j][i]) {
					g.fillRect(j * pixelSize + margin, i * pixelSize + margin,
							pixelSize, pixelSize);
				}
			}
		}

		g.dispose();
		bi.flush();

		return bi;

	}

	public Color getBgColor() {
		return bgColor;
	}

	public Qrcode getConfigure() {
		return configure;
	}

	public char getErrorCorrect() {
		return configure.getQrcodeErrorCorrect();
	}

	public Color getFgColor() {
		return fgColor;
	}

	public int getMargin() {
		return margin;
	}

	public int getPixelSize() {
		return pixelSize;
	}

	public int getVersion() {
		return configure.getQrcodeVersion();
	}

	public void setBgColor(Color bgColor) {
		this.bgColor = bgColor;
	}

	public void setConfigure(Qrcode configure) {
		this.configure = configure;
	}

	protected void setDefault() {
		configure = new Qrcode();
		// 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小
		configure.setQrcodeErrorCorrect('M');
		configure.setQrcodeEncodeMode('B');
		// 设置设置二维码版本号,取值范围1-40,值越大尺寸越大,可存储的信息越大
		configure.setQrcodeVersion(3);
	}

	public void setErrorCorrect(char errorCorrect) {
		this.configure.setQrcodeErrorCorrect(errorCorrect);
	}

	public void setFgColor(Color fgColor) {
		this.fgColor = fgColor;
	}

	public void setMargin(int margin) {
		this.margin = margin;
	}

	public void setPixelSize(int pixelSize) {
		this.pixelSize = pixelSize;
	}

	public void setVersion(int version) {
		this.configure.setQrcodeVersion(version);
	}

}


QRCodeImageDefult.java
package home.ibm.tony.qrcode;

import java.awt.image.BufferedImage;

import jp.sourceforge.qrcode.data.QRCodeImage;

public class QRCodeImageDefult implements QRCodeImage {

	private BufferedImage image;

	public QRCodeImageDefult() {
	}

	public QRCodeImageDefult(BufferedImage image) {
		this.image = image;
	}
	
	public int getHeight() {
		return image.getHeight();
	}

	public BufferedImage getImage() {
		return image;
	}
	 
	public int getPixel(int x, int y) {
		   return image.getRGB(x, y);  
	}
	 
	public int getWidth() {
		 
		return image.getWidth();
	}
	 
	public void setImage(BufferedImage image) {
		this.image = image;
	}

}



QRCodeDemo.java

package home.ibm.tony.qrcode.test;

import home.ibm.tony.qrcode.EnhancedQRCodeDecoder;
import home.ibm.tony.qrcode.QRCodeEncoder;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import javax.imageio.ImageIO;

public class QRCodeDemo {

	public static void main(String[] args) throws IOException {
		String imgPath = "c:/z.png";
		String encoderContent = "http://ieqq.iteye.com/";

		QRCodeEncoder encoder = new QRCodeEncoder();

		ImageIO.write(encoder.encode(encoderContent), "png", new File(imgPath));

		System.out.println("done!");

		EnhancedQRCodeDecoder decoder = new EnhancedQRCodeDecoder();
		String decoderContent = decoder.decodeToString(new FileInputStream(
				new File(imgPath)));
		System.out.println("解析结果如下:");
		System.out.println(decoderContent);
	 
	}
}
  • 大小: 12.4 KB
分享到:
评论

相关推荐

    简单二维码demo

    通常,你需要选择一个特定的`Writer`实现,如`QRCodeWriter`,然后调用`encode`方法,传入要编码的数据、二维码类型、尺寸等参数,最后得到一个`BitMatrix`对象,可以转换为图像。 2. **Reader**: 这部分代码可能...

    条形码、二维码扫描、生成Demo 完整源码

    下面将详细阐述ZXing的工作原理以及如何利用其开发一个完整的条形码、二维码生成与扫描的Demo。 首先,让我们了解一下条形码和二维码。条形码是一种用黑白相间的条纹表示数字和字母的信息编码方式,通常包括UPC...

    二维码的生成和解析demo

    这个"java生成和解析二维码demo"项目可能包含了上述操作的完整示例代码,可以帮助开发者快速上手。通过运行和研究这些代码,你可以了解到如何在实际应用中集成二维码功能,无论是用于生成包含信息的二维码图片,还是...

    java 二维码生成及解析demo

    在IT行业中,二维码作为一种高效的信息编码方式,广泛应用于各种场景,如链接分享、电子票务、产品追溯等。本教程将深入讲解如何使用...通过这个简单的"java 二维码生成及解析demo",你将能够快速上手并掌握相关技术。

    Zxing二维码使用Demo

    Result result = new MultiFormatReader().decode(bitmap); if (result != null) { String decodedContent = result.getText(); // 处理解码后的数据 } ``` 四、Zxing在实际应用中的注意事项 1. 错误处理:在生成...

    java二维码解析demo

    BitMatrix bitMatrix = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, 300, 300); // 保存为图像文件 MatrixToImageWriter.writeToFile(bitMatrix, "PNG", new File(filePath)); } catch ...

    android zxing二维码demo

    可以使用ZXing的`ImageReader`类加载图片,然后调用`decode`方法解析其中的二维码。这需要用户选择一张图片,然后进行处理。 6. **用户交互**:为了使应用更友好,可以添加额外的用户交互元素,如提示信息、错误...

    二维码Zbar(解决中文乱码)附带demo

    可以使用编程语言提供的函数,如Python的`decode()`和`encode()`方法,来完成这个过程。 3. **错误处理**:在转换过程中,可能会遇到无效的字节序列,需要适当地处理这些异常。通常,可以选择忽略错误、替换为特定...

    Zxing生成二维码扫描二维码

    3. 二维码识别:使用`decode`方法对每个图像块进行解码,识别出其中的二维码信息。 四、Zxing在实际应用中的案例 1. 移动支付:在支付宝、微信支付等移动支付场景中,用户可以通过扫描商家的二维码完成支付,或者...

    zxing javademo

    这个“zxing javademo”是一个基于Java的示例项目,展示了如何使用ZXing库来创建和解码二维码。下面我们将详细探讨ZXing库及其在Java中的应用,以及如何通过简单的输入输出操作与二维码交互。 1. **ZXing库介绍** ...

    Zxing Demo

    2. **添加数据**:通过调用`encode()`方法,传入要编码的数据和二维码格式,将数据写入`BitMatrix`。 3. **生成图像**:然后,使用`BitmapEncoder`将`BitMatrix`转换为图像,可以选择不同的格式如PNG或JPEG。 4. **...

    QR 二维码 源码

    3. 调用`Reader`的`decode(BinaryBitmap)`方法,传入预处理后的图像,得到包含二维码数据的`Result`对象。 4. 从`Result`对象中提取解码出的信息,如文本、URL或其他数据类型。 在ZxingDemo示例中,通常会包含以下...

    ZXingQRCode for DelphiXE以上版本DEMO

    4. **编码与解码**:`Encode`方法用于将文本数据编码成二维码图像,`Decode`方法则用于从图像中解码出数据。这两个方法是使用ZXingQRCode控件的核心操作。 5. **图像处理**:在实际应用中,可能需要从图片文件或...

    min_zxing demo工程

    "min_zxing demo工程"是一个基于Android平台的简化版ZXing库项目,旨在提供二维码的解码、解析本地二维码以及生成二维码的核心功能。ZXing,全称“Zebra Crossing”,是一个开源的、跨平台的条码读取库,广泛应用于...

    zxing 生成二维码和解析二维码 SHA1withRSAUtil 证书签名算法

    BitMatrix bitMatrix = new QRCodeWriter().encode(data, BarcodeFormat.QR_CODE, 300, 300, hints); // 保存或显示二维码图像 } } ``` 这段代码展示了如何使用ZXing生成一个包含URL的二维码,设置了错误校正...

    ZXing的demo

    例如,对于QR码,可以使用`QrCodeEncoder`类来构建包含数据的编码模型,然后调用`BitMatrix`的`encode`方法将其转换为二进制矩阵。 - `BitMatrix`对象可以直接转换为位图,然后可以通过`Bitmap`类保存或显示在屏幕...

    Android Zxing Demo

    【Android Zxing Demo】是一个基于二维码开发的示例项目,主要使用了开源库Zxing(ZXing,意为“快速可扩展的条形码”)来实现二维码的生成与扫描功能。Zxing是一个多格式的一维和二维条码图像处理库,支持多种平台...

    Google开源项目ZXing(二维条码编解码)简单使用(Java版)

    在提供的ZxingDemo文件中,可能包含了ZXing在Java环境下的一个演示示例,你可以通过查看和运行该代码,更直观地理解如何在实际项目中应用ZXing。这将帮助你更好地掌握二维码和条形码的处理技术,提高开发效率。

Global site tag (gtag.js) - Google Analytics