zoukankan      html  css  js  c++  java
  • zxing创建二维码

    /*二维码工具类*/
    public class QRCodeUtil { 
      private static final int BLACK = 0xFF000000;//用于设置图案的颜色 
      private static final int WHITE = 0xFFFFFFFF; //用于背景色 
        private static final String CHARSET = "UTF-8";  
        private static final String FORMAT_NAME = "JPG";  
        // 二维码尺寸  
        private static final int QRCODE_SIZE = 200;  
        // LOGO宽度  
        private static final int WIDTH = 60;  
        // LOGO高度  
        private static final int HEIGHT = 60;
    
    //将BitMatrix matrix 转换成BufferedImage类 
    public static BufferedImage toBufferedImage(String content, String logoImgPath, boolean needCompress) throws WriterException, IOException {
    
            Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();  
            hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);  
            hints.put(EncodeHintType.CHARACTER_SET, CHARSET);  
            hints.put(EncodeHintType.MARGIN, 1);  
     BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE, hints);  
        
         int width = matrix.getWidth(); 
            int height = matrix.getHeight();
     BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        for (int x = 0; x < width; x++) { 
            for (int y = 0; y < height; y++) { 
                image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);
           } 
        } 
          // 插入图片  
           QRCodeUtil.insertImage(image, logoImgPath, needCompress);  
    
           return image; 
      }
       /**
         * user: Rex
         * date: 2016年12月29日  上午12:30:09
         * @param source 二维码图片
         * @param logoImgPath Logo
         * @param needCompress 是否压缩Logo
         * @throws IOException
         * void
         * TODO 添加Logo
         */
        private static void insertImage(BufferedImage source, String logoImgPath, boolean needCompress) throws IOException{
            File file = new File(logoImgPath);  
            if (!file.exists()) {  
                return;  
            }  
            
            Image src = ImageIO.read(new File(logoImgPath));  
            int width = src.getWidth(null);  
            int height = src.getHeight(null);  
            if (needCompress) { // 压缩LOGO  
                if (width > WIDTH) {  
                    width = WIDTH;  
                }  
                
                if (height > HEIGHT) {  
                    height = HEIGHT;  
                }  
                
                Image image = src.getScaledInstance(width, height, Image.SCALE_SMOOTH);  
                BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);  
                Graphics g = tag.getGraphics();  
                g.drawImage(image, 0, 0, null); // 绘制缩小后的图  
                g.dispose();  
                src = image;  
            }  
            
            // 插入LOGO  
            Graphics2D graph = source.createGraphics();  
            int x = (QRCODE_SIZE - width) / 2;  
            int y = (QRCODE_SIZE - height) / 2;  
            graph.drawImage(src, x, y, width, height, null);  
            Shape shape = new RoundRectangle2D.Float(x, y, width, width, 6, 6);  
            graph.setStroke(new BasicStroke(3f));  
            graph.draw(shape);  
            graph.dispose();  
        }
      /**
         * user: Rex
         * date: 2016年12月29日  上午12:32:32
         * @param content 二维码内容
         * @param logoImgPath Logo
         * @param destPath 二维码输出路径
         * @param needCompress 是否压缩Logo
         * @throws Exception
         * void
         * TODO 生成带Logo的二维码
         */
        public static void encode(String content, String logoImgPath, String destPath, boolean needCompress) throws Exception {  
            BufferedImage image = QRCodeUtil.createImage(content, logoImgPath, needCompress);  
            FileUtil.mkdirs(destPath);  
            ImageIO.write(image, FORMAT_NAME, new File(destPath));  
        }   
        
        /**
         * user: Rex
         * date: 2016年12月29日  上午12:35:44
         * @param content 二维码内容
         * @param destPath 二维码输出路径
         * @throws Exception
         * void
         * TODO 生成不带Logo的二维码
         */
        public static void encode(String content, String destPath) throws Exception {  
            QRCodeUtil.encode(content, null, destPath, false);  
        }  
        
        /**
         * user: Rex
         * date: 2016年12月29日  上午12:36:58
         * @param content 二维码内容
         * @param logoImgPath Logo
         * @param output 输出流
         * @param needCompress 是否压缩Logo
         * @throws Exception
         * void
         * TODO 生成带Logo的二维码,并输出到指定的输出流
         */
        public static void encode(String content, String logoImgPath, OutputStream output, boolean needCompress) throws Exception {  
            BufferedImage image = QRCodeUtil.createImage(content, logoImgPath, needCompress);  
            ImageIO.write(image, FORMAT_NAME, output);  
        }  
        
        /**
         * user: Rex
         * date: 2016年12月29日  上午12:38:02
         * @param content 二维码内容
         * @param output 输出流
         * @throws Exception
         * void
         * TODO 生成不带Logo的二维码,并输出到指定的输出流
         */
        public static void encode(String content, OutputStream output) throws Exception {  
            QRCodeUtil.encode(content, null, output, false);  
        }  
        
        /**
         * user: Rex
         * date: 2016年12月29日  上午12:39:10
         * @param file 二维码
         * @return 返回解析得到的二维码内容
         * @throws Exception
         * String
         * TODO 二维码解析
         */
        public static String decode(File file) throws Exception {  
            BufferedImage image;  
            image = ImageIO.read(file);  
            if (image == null) {  
                return null;  
            }  
            BufferedImageLuminanceSource source = new BufferedImageLuminanceSource(image);  
            BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));  
            Result result;  
            Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();  
            hints.put(DecodeHintType.CHARACTER_SET, CHARSET);  
            result = new MultiFormatReader().decode(bitmap, hints);  
            String resultStr = result.getText();  
            return resultStr;  
        }  
        
        /**
         * user: Rex
         * date: 2016年12月29日  上午12:39:48
         * @param path 二维码存储位置
         * @return 返回解析得到的二维码内容
         * @throws Exception
         * String
         * TODO 二维码解析
         */
        public static String decode(String path) throws Exception {  
            return QRCodeUtil.decode(new File(path));  
        } 
    }
    
    
    }
    天下无难事,只要肯攀登!见多识广是多么重要!
  • 相关阅读:
    CSS——实现图像远距离翻转效果
    《精通CSS》一个下拉菜单的例子
    将博客搬至CSDN
    44个Java代码性能优化总结
    QRCode 二维码生成
    Linux命令
    spring
    ajax 学习总结
    Servlet+Ajax实现搜索框智能提示代码
    搜索框智能提示
  • 原文地址:https://www.cnblogs.com/Allen-Wei/p/9094629.html
Copyright © 2011-2022 走看看