JAVA生成解析二维码,java,package com.
分享于 点击 18886 次 点评:99
JAVA生成解析二维码,java,package com.
package com.mohe.twocode;import java.awt.Color;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import javax.imageio.ImageIO;import jp.sourceforge.qrcode.QRCodeDecoder;import jp.sourceforge.qrcode.data.QRCodeImage;import jp.sourceforge.qrcode.exception.DecodingFailedException;import com.swetake.util.Qrcode;public class TwoDimensionCode implements QRCodeImage {private BufferedImage bufImg = null;public TwoDimensionCode() {}public TwoDimensionCode(BufferedImage bufImg) {this.bufImg = bufImg;}@Overridepublic int getHeight() {return bufImg.getHeight();}@Overridepublic int getPixel(int x, int y) {return bufImg.getRGB(x, y);}@Overridepublic int getWidth() {return bufImg.getWidth();}/*** 生成二维码(QRCode)图片* * @param content* 存储内容* @param imgPath* 图片路径*/public void encoderQRCode(String content, String imgPath) {this.encoderQRCode(content, imgPath, "png", 7);}/*** 生成二维码(QRCode)图片* * @param content* 存储内容* @param output* 输出流*/public void encoderQRCode(String content, OutputStream output) {this.encoderQRCode(content, output, "png", 7);}/*** 生成二维码(QRCode)图片* * @param content* 存储内容* @param imgPath* 图片路径* @param imgType* 图片类型*/public void encoderQRCode(String content, String imgPath, String imgType) {this.encoderQRCode(content, imgPath, imgType, 7);}/*** 生成二维码(QRCode)图片* * @param content* 存储内容* @param output* 输出流* @param imgType* 图片类型*/public void encoderQRCode(String content, OutputStream output, String imgType) {this.encoderQRCode(content, output, imgType, 7);}/*** 生成二维码(QRCode)图片* * @param content* 存储内容* @param imgPath* 图片路径* @param imgType* 图片类型* @param size* 二维码尺寸*/public void encoderQRCode(String content, String imgPath, String imgType, int size) {try {BufferedImage bufImg = this.qRCodeCommon(content, imgType, size);File imgFile = new File(imgPath);if (!imgFile.exists()) {imgFile.mkdirs();}// 生成二维码QRCode图片ImageIO.write(bufImg, imgType, imgFile);} catch (Exception e) {e.printStackTrace();}}/*** 生成二维码(QRCode)图片* * @param content* 存储内容* @param output* 输出流* @param imgType* 图片类型* @param size* 二维码尺寸*/public void encoderQRCode(String content, OutputStream output, String imgType, int size) {try {BufferedImage bufImg = this.qRCodeCommon(content, imgType, size);// 生成二维码QRCode图片ImageIO.write(bufImg, imgType, output);} catch (Exception e) {e.printStackTrace();}}/*** 生成二维码(QRCode)图片的公共方法* * @param content* 存储内容* @param imgType* 图片类型* @param size* 二维码尺寸* @return*/private BufferedImage qRCodeCommon(String content, String imgType, int size) {BufferedImage bufImg = null;try {Qrcode qrcodeHandler = new Qrcode();// 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小qrcodeHandler.setQrcodeErrorCorrect('M');qrcodeHandler.setQrcodeEncodeMode('B');// 设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大qrcodeHandler.setQrcodeVersion(size);// 获得内容的字节数组,设置编码格式byte[] contentBytes = content.getBytes("utf-8");// 图片尺寸int imgSize = 67 + 12 * (size - 1);bufImg = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE_INT_RGB);Graphics2D gs = bufImg.createGraphics();// 设置背景颜色gs.setBackground(Color.WHITE);gs.clearRect(0, 0, imgSize, imgSize);// 设定图像颜色> BLACKgs.setColor(Color.BLACK);// 设置偏移量,不设置可能导致解析出错int pixoff = 2;// 输出内容> 二维码if (contentBytes.length > 0 && contentBytes.length < 800) {boolean[][] codeOut = qrcodeHandler.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].");}gs.dispose();bufImg.flush();} catch (Exception e) {e.printStackTrace();}return bufImg;}/*** 解析二维码(QRCode)* * @param imgPath* 图片路径* @return*/public String decoderQRCode(String imgPath) {// QRCode 二维码图片的文件File imageFile = new File(imgPath);BufferedImage bufImg = null;String content = null;try {bufImg = ImageIO.read(imageFile);QRCodeDecoder decoder = new QRCodeDecoder();content = new String(decoder.decode(new TwoDimensionCode(bufImg)), "utf-8");} catch (IOException e) {System.out.println("Error: " + e.getMessage());e.printStackTrace();} catch (DecodingFailedException dfe) {System.out.println("Error: " + dfe.getMessage());dfe.printStackTrace();}return content;}/*** 解析二维码(QRCode)* * @param input* 输入流* @return*/public String decoderQRCode(InputStream input) {BufferedImage bufImg = null;String content = null;try {bufImg = ImageIO.read(input);QRCodeDecoder decoder = new QRCodeDecoder();content = new String(decoder.decode(new TwoDimensionCode(bufImg)), "utf-8");} catch (IOException e) {System.out.println("Error: " + e.getMessage());e.printStackTrace();} catch (DecodingFailedException dfe) {System.out.println("Error: " + dfe.getMessage());dfe.printStackTrace();}return content;}/*** 生成二维码* * @param filePath* @return*/public static void encoder(String filePath, String deskCode) {String imgPath = filePath + deskCode + ".png";TwoDimensionCode handler = new TwoDimensionCode();handler.encoderQRCode(deskCode, imgPath, "png");}/*** 解析二维码* * @param filePath* @return*/public static String decoder(String filePath, int deskType, String deskCode) {String imgPath = filePath + deskCode + ".png";TwoDimensionCode handler = new TwoDimensionCode();return handler.decoderQRCode(imgPath);}/*** 生成中间带LOG二维码(QRCode)图片* * @param content* 二维码图片的内容* @param imgPath* 生成二维码图片完整的路径* @param ccbpath* 二维码图片中间的logo路径*/public static int createQRCode(String content, String imgPath, String ccbPath) {try {Qrcode qrcodeHandler = new Qrcode();qrcodeHandler.setQrcodeErrorCorrect('M');qrcodeHandler.setQrcodeEncodeMode('B');qrcodeHandler.setQrcodeVersion(7);// System.out.println(content);byte[] contentBytes = content.getBytes("utf-8");BufferedImage bufImg = new BufferedImage(140, 140, BufferedImage.TYPE_INT_RGB);Graphics2D gs = bufImg.createGraphics();gs.setBackground(Color.WHITE);gs.clearRect(0, 0, 140, 140);// 设定图像颜色 > BLACK// gs.setColor(new Color(255, 200, 0));gs.setColor(Color.BLACK);// 设置偏移量 不设置可能导致解析出错int pixoff = 2;// 输出内容 > 二维码if (contentBytes.length > 0 && contentBytes.length < 120) {boolean[][] codeOut = qrcodeHandler.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 {System.err.println("QRCode content bytes length = " + contentBytes.length + " not in [ 0,120 ]. ");return -1;}// Image img = ImageIO.read(new File(ccbPath));// 实例化一个Image对象。// gs.drawImage(img, 47, 54, null);// gs.setColor(Color.BLUE);// gs.setFont(new Font("微软雅黑", Font.BOLD, 18));// gs.drawString("交享越", 50, 70);// gs.dispose();bufImg.flush();// 生成二维码QRCode图片File imgFile = new File(imgPath);ImageIO.write(bufImg, "png", imgFile);} catch (Exception e) {e.printStackTrace();return -100;}return 0;}public static void main(String[] args) {// String imgPath = "F:/TDDOWNLOAD/Michael_QRCode.png";// String encoderContent = "123131";// TwoDimensionCode handler = new TwoDimensionCode();// handler.encoderQRCode(encoderContent, imgPath, "png");// // try {// // OutputStream output = new FileOutputStream(imgPath);// // handler.encoderQRCode(content, output);// // } catch (Exception e) {// // e.printStackTrace();// // }// System.out.println("========encoder success");//// String decoderContent = handler.decoderQRCode(imgPath);// System.out.println("解析结果如下:");// System.out.println(decoderContent);// System.out.println("========decoder success!!!");// TwoDimensionCode// .createQRCode(// "http://jxy.misuland.com//jxy_manager//downLoadAction!downLoad.action?path=jxy_android.apk",// "F://jxy_android.png",// "C:\\Documents and Settings\\Administrator\\My Documents\\My Pictures\\image\\white.jpg");TwoDimensionCode.createQRCode("http://localhost:8080//jxy_manager//downLoadAction!downLoad.action?path=jxy_android.apk", "F://jxy_android.png", "C:\\Documents and Settings\\Administrator\\My Documents\\My Pictures\\image\\white.jpg");TwoDimensionCode.createQRCode("http://localhost:8080//jxy_manager//downLoadAction!downLoad.action?path=jxy_ios.apk", "F://jxy_ios.png", "C:\\Documents and Settings\\Administrator\\My Documents\\My Pictures\\image\\white.jpg");}}所需jar包可以在这个地址下载http://download.csdn.net/detail/daixinmei/5974269
用户点评