为了账号安全,请及时绑定邮箱和手机立即绑定

数据长度修改后,会报错

d.length < 120 只能输入14个字符长度信息的内容,太小了,将120修改之后,就会报错java.lang.ArrayIndexOutOfBoundsException,这个怎么解决?

http://img1.sycdn.imooc.com//58fea6c40001541513240294.jpg

正在回答

2 回答

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;

}

}


1 回复 有任何疑惑可以回复我~

少导个包import java.io.File;

debug一下看看或把代码都发给我

0 回复 有任何疑惑可以回复我~
#1

慕粉1523472586 提问者

你看下楼下我贴出来的全部代码。
2017-05-24 回复 有任何疑惑可以回复我~
#2

慕粉1523472586 提问者

或者你给我个邮箱 我把工程代码打包给你都可以
2017-05-24 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

数据长度修改后,会报错

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信