一步一步用 java 設(shè)計生成二維碼
在物聯(lián)網(wǎng)的時代,二維碼是個很重要的東西了,現(xiàn)在無論什么東西都要搞個二維碼標志,唯恐落伍,就差人沒有用二維碼識別了。也許有一天生分證或者戶口本都會用二維碼識別了。今天心血來潮,看見別人都為自己的博客添加了二維碼,我也想搞一個測試一下.
主要用來實現(xiàn)兩點:
1. 生成任意文字的二維碼.
2. 在二維碼的中間加入圖像.
一、準備工作。
準備QR二維碼3.0
版本的core包和一張jpg圖片。
下載QR二維碼包。
首先得下載
zxing.jar 包, 我這里用的是3.0
版本的core包
下載地址:
現(xiàn)在已經(jīng)遷移到了github:
https://github.com/zxing/zxing/wiki/Getting-Started-Developing,
當然你也可以從maven倉庫下載jar
包:
http://central./maven2/com/google/zxing/core/
二、程序設(shè)計
1、啟動eclipse,新建一個java項目,命好項目名(本例取名為QRCodeSoft)。點下一步:
2、導(dǎo)入zxing.jar
包,
我這里用的是3.0
版本的core包:點“添加外部JAR(X)…”。
3、新建兩個類,分別是:
BufferedImageLuminanceSource.java
QRCodeUtil.java
關(guān)鍵代碼在于:BufferedImageLuminanceSource.java
和QRCodeUtil.java
, 其中測試的main
方法位于
QRCodeUtil.java 中。
BufferedImageLuminanceSource.java程序代碼:
package qrcodesoft;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import com.google.zxing.LuminanceSource;
public class BufferedImageLuminanceSource extends LuminanceSource
{
private
final BufferedImage image;
private
final int left;
private
final int top;
public
BufferedImageLuminanceSource(BufferedImage image) {
this(image,
0, 0, image.getWidth(), image.getHeight());
}
public
BufferedImageLuminanceSource(BufferedImage image, int left,
int top, int
width, int height) {
super(width,
height);
int
sourceWidth = image.getWidth();
int
sourceHeight = image.getHeight();
if (left +
width > sourceWidth || top + height > sourceHeight) {
throw new
IllegalArgumentException(
"Crop
rectangle does not fit within image data.");
}
for (int y =
top; y < top + height; y++) {
for (int x =
left; x < left + width; x++) {
if
((image.getRGB(x, y) & 0xFF000000) == 0) {
image.setRGB(x, y, 0xFFFFFFFF); // = white
}
}
}
this.image =
new BufferedImage(sourceWidth, sourceHeight,
BufferedImage.TYPE_BYTE_GRAY);
this.image.getGraphics().drawImage(image, 0, 0, null);
this.left =
left;
this.top =
top;
}
public
byte[] getRow(int y, byte[] row) {
if (y < 0
|| y >= getHeight()) {
throw new
IllegalArgumentException(
"Requested
row is outside the image: " + y);
}
|