本帖演示代码由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
分享到:
相关推荐
通常,你需要选择一个特定的`Writer`实现,如`QRCodeWriter`,然后调用`encode`方法,传入要编码的数据、二维码类型、尺寸等参数,最后得到一个`BitMatrix`对象,可以转换为图像。 2. **Reader**: 这部分代码可能...
下面将详细阐述ZXing的工作原理以及如何利用其开发一个完整的条形码、二维码生成与扫描的Demo。 首先,让我们了解一下条形码和二维码。条形码是一种用黑白相间的条纹表示数字和字母的信息编码方式,通常包括UPC...
这个"java生成和解析二维码demo"项目可能包含了上述操作的完整示例代码,可以帮助开发者快速上手。通过运行和研究这些代码,你可以了解到如何在实际应用中集成二维码功能,无论是用于生成包含信息的二维码图片,还是...
在IT行业中,二维码作为一种高效的信息编码方式,广泛应用于各种场景,如链接分享、电子票务、产品追溯等。本教程将深入讲解如何使用...通过这个简单的"java 二维码生成及解析demo",你将能够快速上手并掌握相关技术。
Result result = new MultiFormatReader().decode(bitmap); if (result != null) { String decodedContent = result.getText(); // 处理解码后的数据 } ``` 四、Zxing在实际应用中的注意事项 1. 错误处理:在生成...
BitMatrix bitMatrix = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, 300, 300); // 保存为图像文件 MatrixToImageWriter.writeToFile(bitMatrix, "PNG", new File(filePath)); } catch ...
可以使用ZXing的`ImageReader`类加载图片,然后调用`decode`方法解析其中的二维码。这需要用户选择一张图片,然后进行处理。 6. **用户交互**:为了使应用更友好,可以添加额外的用户交互元素,如提示信息、错误...
可以使用编程语言提供的函数,如Python的`decode()`和`encode()`方法,来完成这个过程。 3. **错误处理**:在转换过程中,可能会遇到无效的字节序列,需要适当地处理这些异常。通常,可以选择忽略错误、替换为特定...
3. 二维码识别:使用`decode`方法对每个图像块进行解码,识别出其中的二维码信息。 四、Zxing在实际应用中的案例 1. 移动支付:在支付宝、微信支付等移动支付场景中,用户可以通过扫描商家的二维码完成支付,或者...
这个“zxing javademo”是一个基于Java的示例项目,展示了如何使用ZXing库来创建和解码二维码。下面我们将详细探讨ZXing库及其在Java中的应用,以及如何通过简单的输入输出操作与二维码交互。 1. **ZXing库介绍** ...
2. **添加数据**:通过调用`encode()`方法,传入要编码的数据和二维码格式,将数据写入`BitMatrix`。 3. **生成图像**:然后,使用`BitmapEncoder`将`BitMatrix`转换为图像,可以选择不同的格式如PNG或JPEG。 4. **...
3. 调用`Reader`的`decode(BinaryBitmap)`方法,传入预处理后的图像,得到包含二维码数据的`Result`对象。 4. 从`Result`对象中提取解码出的信息,如文本、URL或其他数据类型。 在ZxingDemo示例中,通常会包含以下...
4. **编码与解码**:`Encode`方法用于将文本数据编码成二维码图像,`Decode`方法则用于从图像中解码出数据。这两个方法是使用ZXingQRCode控件的核心操作。 5. **图像处理**:在实际应用中,可能需要从图片文件或...
"min_zxing demo工程"是一个基于Android平台的简化版ZXing库项目,旨在提供二维码的解码、解析本地二维码以及生成二维码的核心功能。ZXing,全称“Zebra Crossing”,是一个开源的、跨平台的条码读取库,广泛应用于...
BitMatrix bitMatrix = new QRCodeWriter().encode(data, BarcodeFormat.QR_CODE, 300, 300, hints); // 保存或显示二维码图像 } } ``` 这段代码展示了如何使用ZXing生成一个包含URL的二维码,设置了错误校正...
例如,对于QR码,可以使用`QrCodeEncoder`类来构建包含数据的编码模型,然后调用`BitMatrix`的`encode`方法将其转换为二进制矩阵。 - `BitMatrix`对象可以直接转换为位图,然后可以通过`Bitmap`类保存或显示在屏幕...
【Android Zxing Demo】是一个基于二维码开发的示例项目,主要使用了开源库Zxing(ZXing,意为“快速可扩展的条形码”)来实现二维码的生成与扫描功能。Zxing是一个多格式的一维和二维条码图像处理库,支持多种平台...
在提供的ZxingDemo文件中,可能包含了ZXing在Java环境下的一个演示示例,你可以通过查看和运行该代码,更直观地理解如何在实际项目中应用ZXing。这将帮助你更好地掌握二维码和条形码的处理技术,提高开发效率。