部门刚刚接了一个项目需要,其中有一个功能点是需要扫描二维码进行收费,对于还没接触过二维码的我来说,我还是赶紧百度自学一下,整理网上资料后就有了这篇文章。生成二维码需要使用QRCode.jar包,网上可下载。
Action类:
<span style="font-size:18px;">package com.lmc.action;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.swetake.util.Qrcode;
@Controller
@Scope("prototype")
public class EncoderAction extends BaseAction{
private static final long serialVersionUID = 1L;
private InputStream inputStream;
public String encoder() {
byte[] image = new byte[1000];
try {
image = createImage();
} catch (Exception e) {
e.printStackTrace();
}
this.inputStream = new ByteArrayInputStream(image);
return "stream";
}
public byte[] createImage() throws UnsupportedEncodingException{
Qrcode qrcode = new Qrcode();
qrcode.setQrcodeErrorCorrect('M');
qrcode.setQrcodeEncodeMode('B');
qrcode.setQrcodeVersion(7);
//content为需要生成的字符串,可通过请求传入参数
String content= "https://www.baidu.com"; //存储信息到二维码中,如果是网址扫描后即可跳转到该地址,如果是文字则扫描获取该信息
byte[] bstr = content.getBytes("UTF-8");
BufferedImage bi = new BufferedImage(139, 139,BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
g.setBackground(Color.WHITE); //背景颜色
g.clearRect(0, 0, 139, 139);
g.setColor(Color.BLACK); //条码颜色
if (bstr.length > 0 && bstr.length < 123) {
boolean[][] b = qrcode.calQrcode(bstr); //
for (int i = 0; i < b.length; i++) {
for (int j = 0; j < b.length; j++) {
if (b[j][i]) {
g.fillRect(j * 3 + 2, i * 3 + 2, 3, 3);
}
}
}
}
ByteArrayOutputStream os = new ByteArrayOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);
try {
encoder.encode(bi);
} catch (Exception e) {
e.printStackTrace();
}
return os.toByteArray();
}
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
}</span>
struts.xml配置:
<span style="font-size:18px;"><result name="stream" type="stream">
<param name="inputName">inputStream</param>
<param name="contentType">image</param>
</result></span>
最后一步就是,在地址栏中输入访问该Action的encoder()方法就行了,或者是在jsp中添加<img src="你的URL" />