数据长度修改后,会报错
d.length < 120 只能输入14个字符长度信息的内容,太小了,将120修改之后,就会报错java.lang.ArrayIndexOutOfBoundsException,这个怎么解决?
d.length < 120 只能输入14个字符长度信息的内容,太小了,将120修改之后,就会报错java.lang.ArrayIndexOutOfBoundsException,这个怎么解决?
2017-04-25
package com.wang.test;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import com.swetake.util.Qrcode;
/**
* 生成二维码
* @author Developer Name
*
*/
public class Test3 {
public static void main(String[] args) throws Exception {
String content = "ART M20327,#115664742,9TXZFHPB00185";
String outPath = "D:\\qrCode\\code.jpg";
String logoPath = "D:\\qrCode\\logo.png";
creatQrCode(1, 0, content, outPath, logoPath);
}
/**
* 生成二维码
* @param version 版本
* @param content 内容
* @param outPath 输出路径
* @param logoPath 图标路径
* @param pixoff 偏移量
* @throws Exception
*/
public static void creatQrCode(int version, int pixoff, String content, String outPath,
String logoPath) throws Exception {
// 图片尺寸
int width = 67 + 12 * (version - 1);
int height = 67 + 12 * (version - 1);
//int width = 30;
//int height = 30;
// 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小
Qrcode code = new Qrcode();
code.setQrcodeErrorCorrect('M');
code.setQrcodeEncodeMode('B');
// 设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大
code.setQrcodeVersion(version);
BufferedImage bufferImage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D gs = bufferImage.createGraphics();
// 设置背景颜色
gs.setBackground(Color.WHITE);
// 设定图像颜色> BLACK
gs.setColor(Color.BLACK);
//清空画板
gs.clearRect(0, 0, width, height);
// 获得内容的字节数组,设置编码格式
byte[] contentBytes = content.getBytes("gb2312");
// 输出内容> 二维码
if (contentBytes.length > 0 && contentBytes.length < 120) {
boolean[][] codeOut = code.calQrcode(contentBytes);
for (int i = 0; i < codeOut.length; i++) {
for (int j = 0; j < codeOut.length; j++) {
if (codeOut[j][i]) {
gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
}
}
}
} else {
throw new Exception("QRCode content bytes length = " + contentBytes.length + " not in [0, 800].");
}
createPhotoAtCenter(bufferImage, logoPath);
gs.dispose();
bufferImage.flush();
ImageIO.write(bufferImage, "jpg", new File(outPath));
}
/**
* 加入logo
*
* @param bufImg 要添加的二维码对象
* @param logoPath 要添加logo的路径
* @return
* @throws Exception
*/
private static BufferedImage createPhotoAtCenter(BufferedImage bufImg, String logoPath) throws Exception {
Image image = ImageIO.read(new File(logoPath));
Graphics2D graphics = bufImg.createGraphics();
// 获取bufImg的中间位置
int centerX = bufImg.getMinX() + bufImg.getWidth() / 2 - 30 / 2;
int centerY = bufImg.getMinY() + bufImg.getHeight() / 2 - 30 / 2;
graphics.drawImage(image, centerX + 35, centerY, 30, 30, null);
graphics.dispose();
bufImg.flush();
return bufImg;
}
}
举报