Java生成二维码及条形码工具类

Maven依赖

 <dependency>
     <groupId>com.google.zxing</groupId>
     <artifactId>javase</artifactId>
     <version>3.4.1</version>
 </dependency>

生成二维码

生成带颜色的二维码

 import java.awt.Color;
 import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Random;
 ​
 import javax.imageio.ImageIO;
 ​
 import com.google.zxing.BarcodeFormat;
 import com.google.zxing.EncodeHintType;
 import com.google.zxing.MultiFormatWriter;
 import com.google.zxing.client.j2se.MatrixToImageWriter;
 import com.google.zxing.common.BitMatrix;
 ​
 public class DemoTest {
     public static void main(String[] args) throws Exception {
         // 二维码原理(将字符串信息通过一规则转换为图像)
         // 生成二维码
         String name = "d:/my.png";
         String content = "www.baidu.com";
         int width = 400;
         int height = 400;
 ​
         Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
         hints.put(EncodeHintType.MARGIN, 2);
         hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
         BitMatrix bm = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
         MatrixToImageWriter.writeToStream(bm, "png", new FileOutputStream(name));
 ​
         // 上面生成普通二维码,下面生成带颜色二维码------------------------------------------------------------
 ​
         BufferedImage bar = ImageIO.read(new File(name));
         BufferedImage ok = new BufferedImage(width, height, 1);
         ok.getGraphics().drawImage(bar, 0, 0, width, height, null);
         Random rand = new Random();
         Color c = new Color(rand.nextInt(255), rand.nextInt(255), rand.nextInt(255), rand.nextInt(255));
         for (int x = 0; x < width; x++) {
             for (int y = 0; y < height; y++) {
                 ok.setRGB(x, y, bar.getRGB(x, y) == -1 ? 0xffffffff : c.getRGB());
             }
         }
         ImageIO.write(ok, "png", new File("d:/mymy.png"));
     }
 ​
 }

运行截图:

解析二维码

 import java.awt.image.BufferedImage;
 import java.io.File;
 ​
 import javax.imageio.ImageIO;
 ​
 import com.google.zxing.BinaryBitmap;
 import com.google.zxing.LuminanceSource;
 import com.google.zxing.MultiFormatReader;
 import com.google.zxing.Result;
 import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
 import com.google.zxing.common.HybridBinarizer;
 ​
 public class DemoTest {
     public static void main(String[] args) throws Exception {
         // 解析读取二维码
         // 解析图像
         BufferedImage i = ImageIO.read(new File("d:/my.png"));
         LuminanceSource source = new BufferedImageLuminanceSource(i);
         BinaryBitmap image = new BinaryBitmap(new HybridBinarizer(source));
         try {
             Result result = new MultiFormatReader().decode(image);
             String info = result.getText();
             System.out.println(info);
             if (info == null || "".equals(info)) {
                 System.out.println("没有二维码信息");
             } else if (info.contains("weixin")) {
                 System.out.println("有微信二维码,不允许");
             } else {
                 System.out.println("有二维,可以使用");
             }
         } catch (Exception e) {
             System.out.println("图像中没有二维码");
         }
     }
 ​
 }

运行截图

生成条形码

生成带数字的条形码(可调色)

 import java.awt.Graphics2D;
 import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.awt.Color;
 import java.awt.Font;
 import java.awt.RenderingHints;
 ​
 import javax.imageio.ImageIO;
 ​
 import com.google.zxing.BarcodeFormat;
 import com.google.zxing.MultiFormatWriter;
 import com.google.zxing.client.j2se.MatrixToImageWriter;
 import com.google.zxing.common.BitMatrix;
 ​
 public class DemoTest3 {
 ​
     public static void main(String[] args) throws Exception {
         // 生成产品条码效果
         String name = "d:/bar.png";
         String content = "6923790798701";
         int width = 300;
         int height = 100;
 ​
         BitMatrix bm = new MultiFormatWriter().encode(content, BarcodeFormat.EAN_13, width, height);
 ​
         MatrixToImageWriter.writeToStream(bm, "png", new FileOutputStream(name));
 ​
         // 以上代码只生成条形码,下面代码生成带数字条形码(可调整颜色)(带数字的条形码是在条形码的基础上进行生成的)
 ​
         BufferedImage bar2 = ImageIO.read(new File(name));
         BufferedImage bar = new BufferedImage(bar2.getWidth(), bar2.getHeight() + 30, 1);
 ​
         Graphics2D g = bar.createGraphics();
         g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);
         g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
         g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_DEFAULT);
 ​
         g.setColor(Color.WHITE);
         g.fillRect(0, 0, bar2.getWidth(), bar2.getHeight() + 30);
         g.drawImage(bar2, 0, 15, bar2.getWidth(), bar2.getHeight(), null);
         g.fillRect(62, 100, 85, 15);
         g.fillRect(155, 100, 83, 15);
         g.setColor(Color.BLACK);
         g.setFont(new Font("", Font.PLAIN, 22));
 ​
         g.drawString(content.substring(0, 1), 40, 120);
         g.drawString(content.substring(1, 7), 68, 120);
         g.drawString(content.substring(7), 158, 120);
         g.dispose();
 ​
         ImageIO.write(bar, "png", new File("d:/bar2.png"));
 ​
     }
 ​
 }

运行截图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值