您的位置:首页 > 编程语言 > Java开发

maven springmvc 生成二维码

2015-08-28 14:47 393 查看
public static void main(String[] args) throws WriterException

    {

        String content = "766EBCD59621E305170616BA3D3DAC32";

        String filePath = "D:/qrCode.jpg";

        BufferedImage logo = null;

        try

        {

            File file=new File("D://logo.png");

            InputStream is=new FileInputStream(file);

            logo = ImageIO.read(is);

            

//            String path= "http://112.126.83.175/laiqu/head/20150612/SERVICE_HEAD_PHOTO_576_20150612123514641.png";

//            URL url = new URL(path);           

//            HttpURLConnection conn = (HttpURLConnection) url.openConnection();

//          logo = ImageIO.read(conn.getInputStream());

            logo = ImageUtil.resizeImage1(logo,80, 0.9f, true);

            createQrCode(logo,content,500,500,filePath);

        }

        catch (Exception e)

        {

            e.printStackTrace();

        }

    }

    public static void createQrCode(BufferedImage logo,String content,int width,int height,String filePath){

        try {

            if(width == 0){width = 500;}

            if(height == 0){height = 500;}

            QrCodeUtil zp = new QrCodeUtil();

            BufferedImage bi = null;

            BufferedImage bim = zp.getQR_CODEBufferedImage(content, BarcodeFormat.QR_CODE, width, height, zp.getDecodeHintType());

            if(logo != null){

                bi =  zp.addLogo_QRCode(bim, logo, new LogoConfig());

            }else{

                bi = bim;

            }

           ImageIO.write(bi, "jpeg", new File(filePath));

        } catch (Exception e) {

            // TODO: handle exception

            e.printStackTrace();

        }

    }

    public static BufferedImage createQrCode(BufferedImage logo,String content,int width,int height){

        try {

            if(width == 0){width = 500;}

            if(height == 0){height = 500;}

            QrCodeUtil zp = new QrCodeUtil();

            BufferedImage bi = null;

            BufferedImage bim = zp.getQR_CODEBufferedImage(content, BarcodeFormat.QR_CODE, width, height, zp.getDecodeHintType());

            if(logo != null){

                bi =  zp.addLogo_QRCode(bim, logo, new LogoConfig());

            }else{

                return bim;

            }

//            parseQR_CODEImage(bi);

            return bi;

        } catch (Exception e) {

            // TODO: handle exception

            e.printStackTrace();

        }

        return null;

    }

    /**

     * 给二维码图片添加Logo

     *

     * @param qrPic

     * @param logoPic

     */

    public BufferedImage addLogo_QRCode(BufferedImage image_, BufferedImage logo_, LogoConfig logoConfig)

    {

        try

        {

            /**

             * 读取二维码图片,并构建绘图对象

             */

            BufferedImage image = image_;

            Graphics2D g = image.createGraphics();

 

            /**

             * 读取Logo图片

             */

            BufferedImage logo = logo_;

             

            int widthLogo = logo.getWidth(), heightLogo = logo.getHeight();

            // 计算图片放置位置

            int x = (image.getWidth() - widthLogo) / 2;

            int y = (image.getHeight() - logo.getHeight()) / 2;

 

            //开始绘制图片

            g.drawImage(logo, x, y, widthLogo, heightLogo, null);

            g.drawRoundRect(x, y, widthLogo, heightLogo, 15, 15);

            g.setStroke(new BasicStroke(logoConfig.getBorder()));

            g.setColor(logoConfig.getBorderColor());

            g.drawRect(x, y, widthLogo, heightLogo);

             

            g.dispose();

            return image;

//            ImageIO.write(image, "jpeg", new File("D:/newPic.jpg"));

        }

        catch (Exception e)

        {

            e.printStackTrace();

        }

        return null;

    }

 

    /**

     * 二维码的解析

     *

     * @param BufferedImage

     */

    public static void parseQR_CODEImage(BufferedImage image_)

    {

        try

        {

            MultiFormatReader formatReader = new MultiFormatReader();

 

            BufferedImage image = image_;

 

            LuminanceSource source = new BufferedImageLuminanceSource(image);

            Binarizer binarizer = new HybridBinarizer(source);

            BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);

 

            Map hints = new HashMap();

            hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");

 

            Result result = formatReader.decode(binaryBitmap, hints);

            System.out.println("result = " + result.toString());

            System.out.println("resultFormat = " + result.getBarcodeFormat());

            System.out.println("resultText = " + result.getText());

        }

        catch (Exception e)

        {

            e.printStackTrace();

        }

    }

 

    /**

     * 将二维码生成为文件

     *

     * @param bm

     * @param imageFormat

     * @param file

     */

    public void decodeQR_CODE2ImageFile(BitMatrix bm, String imageFormat, File file)

    {

        try

        {

            if (null == file || file.getName().trim().isEmpty())

            {

                throw new IllegalArgumentException("文件异常,或扩展名有问题!");

            }

 

            BufferedImage bi = fileToBufferedImage(bm);

            ImageIO.write(bi, "jpeg", file);

        }

        catch (Exception e)

        {

            e.printStackTrace();

        }

    }

 

    /**

     * 将二维码生成为输出流

     *

     * @param content

     * @param imageFormat

     * @param os

     */

    public void decodeQR_CODE2OutputStream(BitMatrix bm, String imageFormat, OutputStream os)

    {

        try

        {

            BufferedImage image = fileToBufferedImage(bm);

            ImageIO.write(image, imageFormat, os);

        }

        catch (Exception e)

        {

            e.printStackTrace();

        }

    }

 

    /**

     * 构建初始化二维码

     *

     * @param bm

     * @return

     */

    public BufferedImage fileToBufferedImage(BitMatrix bm)

    {

        BufferedImage image = null;

        try

        {

            int w = bm.getWidth(), h = bm.getHeight();

            image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);

 

            for (int x = 0; x < w; x++)

            {

                for (int y = 0; y < h; y++)

                {

                    image.setRGB(x, y, bm.get(x, y) ? 0xFF000000 : 0xFFCCDDEE);

                }

            }

 

        }

        catch (Exception e)

        {

            e.printStackTrace();

        }

        return image;

    }

 

    /**

     * 生成二维码bufferedImage图片

     *

     * @param content

     *            编码内容

     * @param barcodeFormat

     *            编码类型

     * @param width

     *            图片宽度

     * @param height

     *            图片高度

     * @param hints

     *            设置参数

     * @return

     */

    public BufferedImage getQR_CODEBufferedImage(String content, BarcodeFormat barcodeFormat, int width, int height, Map<EncodeHintType, ?> hints)

    {

        MultiFormatWriter multiFormatWriter = null;

        BitMatrix bm = null;

        BufferedImage image = null;

        try

        {

            multiFormatWriter = new MultiFormatWriter();

 

            // 参数顺序分别为:编码内容,编码类型,生成图片宽度,生成图片高度,设置参数

            bm = multiFormatWriter.encode(content, barcodeFormat, width, height, hints);

 

            int w = bm.getWidth();

            int h = bm.getHeight();

            image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);

 

            // 开始利用二维码数据创建Bitmap图片,分别设为黑(0xFFFFFFFF)白(0xFF000000)两色

            for (int x = 0; x < w; x++)

            {

                for (int y = 0; y < h; y++)

                {

                    image.setRGB(x, y, bm.get(x, y) ? 0xFF000000 : 0xFFCCDDEE);

                }

            }

        }

        catch (WriterException e)

        {

            e.printStackTrace();

        }

        return image;

    }

 

    /**

     * 设置二维码的格式参数

     *

     * @return

     */

    public Map<EncodeHintType, Object> getDecodeHintType()

    {

d07b

        // 用于设置QR二维码参数

        Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();

        // 设置QR二维码的纠错级别(H为最高级别)具体级别信息

        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);

        // 设置编码方式

        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");

        hints.put(EncodeHintType.MAX_SIZE, 350);

        hints.put(EncodeHintType.MIN_SIZE, 100);

 

        return hints;
    }

public class LogoConfig {

    // logo默认边框颜色

    public static final Color DEFAULT_BORDERCOLOR = Color.WHITE;

    // logo默认边框宽度

    public static final int DEFAULT_BORDER = 2;

    // logo大小默认为照片的1/5

    public static final int DEFAULT_LOGOPART = 5;

    private final int border = DEFAULT_BORDER;

    private final Color borderColor;

    private final int logoPart;

    /**

    * Creates a default config with on color {@link #BLACK} and off color

    * {@link #WHITE}, generating normal black-on-white barcodes.

    */

    public LogoConfig()

    {

        this(DEFAULT_BORDERCOLOR, DEFAULT_LOGOPART);

    }

    public LogoConfig(Color borderColor, int logoPart)

    {

        this.borderColor = borderColor;

        this.logoPart = logoPart;

    }

    public Color getBorderColor()

    {

        return borderColor;

    }

    public int getBorder()

    {

        return border;

    }

    public int getLogoPart()

    {

        return logoPart;

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: