Java Zxing生成二维码与解析

来源:互联网 发布:mac移动硬盘写入软件 编辑:程序博客网 时间:2024/06/05 15:10

代码与jar包下载 提取码:edvu

package code;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.util.HashMap;import java.util.Map;import javax.imageio.ImageIO;import com.google.zxing.BarcodeFormat;import com.google.zxing.Binarizer;import com.google.zxing.BinaryBitmap;import com.google.zxing.DecodeHintType;import com.google.zxing.EncodeHintType;import com.google.zxing.LuminanceSource;import com.google.zxing.MultiFormatReader;import com.google.zxing.MultiFormatWriter;import com.google.zxing.Result;import com.google.zxing.client.j2se.BufferedImageLuminanceSource;import com.google.zxing.common.BitMatrix;import com.google.zxing.common.HybridBinarizer;public class Zxing {    private static final int BLACK = 0xff000000;    private static final int WHITE = 0xFFFFFFFF;    public static void main(String[] args) {        //2.最多2685个字母635个汉字超过则报错        Zxing test = new Zxing();        String filePostfix="png";        String content="https://www.baidu.com?name=郭云飞";        try {            content =new String(content.getBytes("UTF-8"),"ISO-8859-1");        } catch (Exception e) {            e.printStackTrace();        }        File file = new File("E:/code/"+System.currentTimeMillis()+"."+filePostfix);        test.encode(content,file,filePostfix,BarcodeFormat.QR_CODE,64+12*(51-1),64+12*(51-1),null);        test.decodeQr("E:\\code\\1502524946182.png");    }    /**     *  生成QRCode二维码<br>      *  在编码时需要将com.google.zxing.qrcode.encoder.Encoder.java中的<br>     *  static final String DEFAULT_BYTE_MODE_ENCODING = "ISO8859-1";<br>     *  修改为UTF-8,否则中文编译后解析不了<br>     * @param contents 二维码的内容     * @param file 二维码保存的路径,如:C://test_QR_CODE.png     * @param filePostfix 生成二维码图片的格式:png,jpeg,gif等格式     * @param format qrcode码的生成格式     * @param width 图片宽度     * @param height 图片高度     * @param hints     */    public void encode(String contents, File file,String filePostfix, BarcodeFormat format, int width, int height, Map<EncodeHintType, ?> hints) {        try {            BitMatrix bitMatrix = new MultiFormatWriter().encode(contents, format, width, height);            writeToFile(bitMatrix, filePostfix, file);        } catch (Exception e) {            e.printStackTrace();        }    }    /**     * 生成二维码图片<br>     *      * @param matrix     * @param format     *            图片格式     * @param file     *            生成二维码图片位置     * @throws IOException     */    public static void writeToFile(BitMatrix matrix, String format, File file) throws IOException {        BufferedImage image = toBufferedImage(matrix);        ImageIO.write(image, format, file);    }    /**     * 生成二维码内容<br>     *      * @param matrix     * @return     */    public static BufferedImage toBufferedImage(BitMatrix matrix) {        int width = matrix.getWidth();        int height = matrix.getHeight();        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);        for (int x = 0; x < width; x++) {            for (int y = 0; y < height; y++) {                image.setRGB(x, y, matrix.get(x, y) == true ? BLACK : WHITE);            }        }        return image;    }    /**     * 二维码解析     * @param filePath     * @return     */    public static String decodeQr(String filePath) {        String retStr = "";        if ("".equalsIgnoreCase(filePath) && filePath.length() == 0) {            return "图片路径为空!";        }        try {            BufferedImage bufferedImage = ImageIO.read(new FileInputStream(filePath));            LuminanceSource source = new BufferedImageLuminanceSource(bufferedImage);            Binarizer binarizer = new HybridBinarizer(source);            BinaryBitmap bitmap = new BinaryBitmap(binarizer);            HashMap<DecodeHintType, Object> hintTypeObjectHashMap = new HashMap<DecodeHintType,Object>();            hintTypeObjectHashMap.put(DecodeHintType.CHARACTER_SET, "UTF-8");            Result result = new MultiFormatReader().decode(bitmap, hintTypeObjectHashMap);            retStr = result.getText();            System.out.println("解析完成:"+retStr);        } catch (Exception e) {            e.printStackTrace();        }        return retStr;    }}
原创粉丝点击