Java代码生成二维码图片


需要使用到的jar包:QRCode.jar 下边是一个链接如果链接失效请百度下载。

这里提供一个下载: 点此下载QRCode.jar 

package com.lc.test;
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.exception.DecodingFailedException;

import com.swetake.util.Qrcode;


public class TwoDimensionCode {
     
      /**
      * 生成二维码(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);
                 // 生成二维码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);

                 // 设定图像颜色> BLACK
                gs.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 TwoDimensionCodeImage(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 TwoDimensionCodeImage(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;
     }

      public static void main(String[] args) {
           String imgPath = "G:/ZTFCard.png";
           String encoderContent = "我的名片" + "\n我的微博:[http://blog.csdn.net/xlgen157387]" + "\n电子邮件:[1573876303@qq.com]" +"\n手机:[1808462274]" ;
           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!!!" );
     }
}

package com.lc.test;

import java.awt.image.BufferedImage;

import jp.sourceforge.qrcode.data.QRCodeImage;

public class TwoDimensionCodeImage implements QRCodeImage {

	BufferedImage bufImg;

	public TwoDimensionCodeImage(BufferedImage bufImg) {
		this.bufImg = bufImg;
	}

	public int getHeight() {
		return bufImg.getHeight();
	}

	public int getPixel(int x, int y) {
		return bufImg.getRGB(x, y);
	}

	public int getWidth() {
		return bufImg.getWidth();
	}
}


下面是一个测试的类:QRtest.java

public class QRtest {
    public static void main(String[] args){
        TwoDimensionCode td = new TwoDimensionCode();
        td.encoderQRCode("这是一个测试文件类","d://123.jpg","jpg",12);
    }
}


(注意:有的朋友可能在使用代码的时候,无法导入javax.imageio.ImageIO这个包,请参考这个:点击打开链接
 

解决方案是:Project---Properties,选择Java Build Path,选中右侧的Libraries,选择Add Library如下图,选中JRE System Library 选择next,进入下一界面选择Execution environment,点击Enviroments按钮选择你采用的JDK如JavaSE-1.6等,不要选下面的OSGi,最后单击完成即可。




结果如下:


OK!



  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
可以使用第三方库Zxing来生成二维码图片,具体实现可以参考以下Java代码: ``` import java.awt.image.BufferedImage; import java.io.File; 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.EncodeHintType; import com.google.zxing.MultiFormatWriter; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; public class QrCodeGenerator { public static void main(String[] args) throws WriterException, IOException { String url = "https://www.example.com"; int width = 300; int height = 300; String format = "png"; File qrFile = new File("qrcode.png"); Map<EncodeHintType, Object> hintMap = new HashMap<EncodeHintType, Object>(); hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L); createQRCode(url, width, height, format, hintMap, qrFile); } private static void createQRCode(String url, int width, int height, String format, Map hintMap, File qrFile) throws WriterException, IOException { BitMatrix matrix = new MultiFormatWriter().encode(new String(url.getBytes("UTF-8"), "ISO-8859-1"), BarcodeFormat.QR_CODE, width, height, hintMap); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); image.createGraphics(); java.awt.Graphics2D graphics = (java.awt.Graphics2D) image.getGraphics(); graphics.setColor(java.awt.Color.WHITE); graphics.fillRect(0, 0, width, height); graphics.setColor(java.awt.Color.BLACK); for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { if (matrix.get(i, j)) { graphics.fillRect(i, j, 1, 1); } } } ImageIO.write(image, format, qrFile); } } ``` 该代码可以生成一个指定URL的二维码图片,保存在本地文件qrcode.png中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐刘根

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值