-
Java二维码生成
2018-03-31 14:26:59JAVA二维码生成JAVA二维码生成JAVA二维码生成JAVA二维码生成JAVA二维码生成 -
java 二维码生成
2017-07-06 15:33:00google开源接口,java二维码生成 -
java二维码生成
2012-08-21 21:27:19java二维码生成 -
java 二维码 生成
2015-04-21 15:31:25java 二维码生成代码,包含详细的注释。可以方便的阅读和快速使用。 -
zxing.zip(Java二维码生成)
2019-12-18 09:17:13Java二维码生成 Java二维码生成 Java二维码生成 Java二维码生成 Java二维码生成 Java二维码生成 -
java 二维码生成 例子已经运行成功
2018-06-22 23:21:37java 二维码生成java 二维码生成java 二维码生成java 二维码生成java 二维码生成 -
Java 二维码生成
2019-12-04 19:37:50二维码生成,前端和后端都可以生成。前端通过:qrcode.js,可以自行百度。 我这边主要记录下Java生成二维码的步骤: 创建二维码矩阵信息 生成二维码图片 二维码中心添加logo 将二维码写入背景图片 下图就是生成...先说下需求:
做一个推广项目,根据访问url生成二维码,用户通过识别二维码就可以访问应用。
二维码生成,前端和后端都可以生成。前端通过:qrcode.js,可以自行百度。
我这边主要记录下Java生成二维码的步骤:
- 创建二维码矩阵信息
- 生成二维码图片
- 二维码中心添加logo
- 将二维码写入背景图片
下图就是生成好
二维码:
带logo二维码:
加背景的二维码:
代码如下:(**ImageIo读取图片流可能会造成图片出现颜色失真,自行百度处理**)
package cn.medbanks.backend.market.center.biz.common.utils; 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; import java.awt.BasicStroke; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Hashtable; import javax.imageio.ImageIO; import org.springframework.core.io.ClassPathResource; import lombok.extern.slf4j.Slf4j; /** * 二维码生成工具类 * @author huaxiaozhou * @since 2019-11-26 09:56 */ @Slf4j public class QRCodeUtils { private static final int BLACK = 0xFF000000;//黑色 private static final int WHITE = 0xFFFFFFFF;//白色 private static final int margin = 0;//边框 private static final int LogoPart = 4;// /** * 生成二维码矩阵信息 * * @param url 二维码图片内容 * @param width 二维码图片宽度 * @param height 二维码图片高度 */ public static BitMatrix setBitMatrix(String url, int width, int height) { Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>(); hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); // 指定编码方式,防止中文乱码 hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); // 指定纠错等级 hints.put(EncodeHintType.MARGIN, margin); // 指定二维码四周白色区域大小 BitMatrix bitMatrix = null; try { bitMatrix = new MultiFormatWriter().encode(url, BarcodeFormat.QR_CODE, width, height, hints); } catch (WriterException e) { e.printStackTrace(); } return bitMatrix; } /** * 生成二维码图片 * * @param matrix 二维码矩阵信息 */ public static BufferedImage toBufferedImage(BitMatrix matrix) { int width = matrix.getWidth(); int height = matrix.getHeight(); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE); } } return image; } /** * 在二维码图片中添加logo图片 * * @param image 二维码图片 * @param logoLocation logo图片 */ public static BufferedImage addLogo(BufferedImage image, String logoLocation) throws IOException { Graphics2D g = image.createGraphics(); BufferedImage logoImage = getClassPathResource(logoLocation); // 计算logo图片大小,可适应长方形图片,根据较短边生成正方形 int width = image.getWidth() < image.getHeight() ? image.getWidth() / LogoPart : image.getHeight() / LogoPart; int height = width; // 计算logo图片放置位置 int x = (image.getWidth() - width) / 2; int y = (image.getHeight() - height) / 2; // 在二维码图片上绘制logo图片 g.drawImage(logoImage, x, y, width, height, null); // 绘制logo边框,可选 // g.drawRoundRect(x, y, logoImage.getWidth(), logoImage.getHeight(), 10, 10); g.setStroke(new BasicStroke(2)); // 画笔粗细 //g.setColor(Color.WHITE); // 边框颜色 g.drawRect(x, y, width, height); // 矩形边框 logoImage.flush(); g.dispose(); return image; } /** * 将二维码图片画到背景图片里 * zhouxiaoyu.add 20191127 * * @param image 二维码图片 * @param bgLocation 背景图片路径 */ public static BufferedImage addQRImage(BufferedImage image, String bgLocation) throws IOException { //1.获取背景图片BufferedImage BufferedImage BGImage = getBufferedImage(bgLocation); //2.将二维码画入背景图片中 Graphics2D g = BGImage.createGraphics();//创建画板对象 int x = (BGImage.getWidth() - image.getWidth()) / 2; int y = BGImage.getHeight() / 4;//设置画板纵坐标,高度的1/4 /** * 二维码长度为横坐标4/6的长度, x+10,居中显示 * 二维码的高度为纵坐标2/4,y+10:文案空出一点距离 */ g.drawImage(image, x, y + 10, image.getWidth(), image.getHeight(), null); BGImage.flush(); g.dispose(); return BGImage; } /** * 获取 ClassPathResource 下图片 * @param resouceLocation * @return * @throws IOException */ private static BufferedImage getClassPathResource(String resouceLocation) throws IOException { ClassPathResource cpr = new ClassPathResource(resouceLocation); return ImageIO.read(cpr.getInputStream()); } /** * 拷贝新图片,解决流颜色失真 * @param resouceLocation * @return * @throws IOException */ private static BufferedImage getBufferedImage(String resouceLocation) throws IOException { BufferedImage img = getClassPathResource(resouceLocation); BufferedImage newImg = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_RGB); newImg.getGraphics().drawImage(img, 0, 0, null); return newImg; } }
-
JAVA二维码生成
2015-05-15 17:10:59JAVA二维码生成功能:可以生成带有Logo的二维码图片,采用第三方JAR包,QRCode.jar,并没有使用google的zxing。主要是我们的环境是jdk1.5的,我网上找不到1.5编译出来的zxing的jar包,好郁闷。啥也不说,直接上源码...JAVA二维码生成
功能:可以生成带有Logo的二维码图片,采用第三方JAR包,QRCode.jar,并没有使用google的zxing。主要是我们的环境是jdk1.5的,我网上找不到1.5编译出来的zxing的jar包,好郁闷。
啥也不说,直接上源码,直接可用。
import com.swetake.util.Qrcode; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.OutputStream; /** * Created by netvempive on 2015-04-20. */ public class QRCode { /** * 生成二维码(QRCode)图片,直接在指定路径下生成图片 * @param content 二维码图片的内容 * @param imgPath 生成二维码图片完整的路径 * @param ccbpath 二维码图片中间的logo路径 */ public static int createQRCode(String content, String imgPath,String ccbPath) { try { Qrcode qrcodeHandler = new Qrcode(); qrcodeHandler.setQrcodeErrorCorrect('M'); qrcodeHandler.setQrcodeEncodeMode('B'); qrcodeHandler.setQrcodeVersion(7); // System.out.println(content); byte[] contentBytes = content.getBytes("gb2312"); //构造一个BufferedImage对象 设置宽、高 BufferedImage bufImg = new BufferedImage(140, 140, BufferedImage.TYPE_INT_RGB); Graphics2D gs = bufImg.createGraphics(); gs.setBackground(Color.WHITE); gs.clearRect(0, 0, 140, 140); // 设定图像颜色 > BLACK gs.setColor(Color.BLACK); // 设置偏移量 不设置可能导致解析出错 int pixoff = 2; // 输出内容 > 二维码 if (contentBytes.length > 0 && contentBytes.length < 120) { 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 { System.err.println("QRCode content bytes length = " + contentBytes.length + " not in [ 0,120 ]. "); return -1; } Image img = ImageIO.read(new File(ccbPath));//实例化一个Image对象。 gs.drawImage(img, 55, 55, 30, 30, null); gs.dispose(); bufImg.flush(); // 生成二维码QRCode图片 File imgFile = new File(imgPath); ImageIO.write(bufImg, "png", imgFile); }catch (Exception e){ e.printStackTrace(); return -100; } return 0; } /** * 生成二维码(QRCode)图片,以流的方式输出二维码图片 * @param content 二维码图片的内容 * @param output生成二维码图片完整的路径 */ public static int createQRCode(String content, OutputStream output) { try { String ccbPath = QRCode.class.getClassLoader().getResource("/com/common/utils/logo.jpg").toURI().getPath(); Qrcode qrcodeHandler = new Qrcode(); qrcodeHandler.setQrcodeErrorCorrect('M'); qrcodeHandler.setQrcodeEncodeMode('B'); qrcodeHandler.setQrcodeVersion(7); // System.out.println(content); byte[] contentBytes = content.getBytes("gb2312"); //构造一个BufferedImage对象 设置宽、高 BufferedImage bufImg = new BufferedImage(140, 140, BufferedImage.TYPE_INT_RGB); Graphics2D gs = bufImg.createGraphics(); gs.setBackground(Color.WHITE); gs.clearRect(0, 0, 140, 140); // 设定图像颜色 > BLACK gs.setColor(Color.BLACK); // 设置偏移量 不设置可能导致解析出错 int pixoff = 2; // 输出内容 > 二维码 if (contentBytes.length > 0 && contentBytes.length < 120) { 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 { System.err.println("QRCode content bytes length = " + contentBytes.length + " not in [ 0,120 ]. "); return -1; } Image img = ImageIO.read(new File(ccbPath));//实例化一个Image对象。 gs.drawImage(img, 55, 55, 30, 30, null); gs.dispose(); bufImg.flush(); // 生成二维码QRCode图片 /*File imgFile = new File(imgPath); ImageIO.write(bufImg, "png", imgFile);*/ ImageIO.write(bufImg, "png", output); }catch (Exception e){ e.printStackTrace(); return -100; } return 0; } public static void main(String[] args) { createQRCode("1234","e:/1.jpg","e:/test.jpg"); } }
-
java二维码生成Demo
2017-02-08 20:26:49java二维码生成Demo -
java二维码生成的方法
2020-08-30 07:44:43主要为大家详细介绍了java二维码生成的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
java二维码生成器
2014-02-16 18:29:21java 二维码生成器; 在使用二维码生成器时,系统默认会将生成的二维码图片放在D盘。 -
java二维码生成 带logo
2018-04-25 18:28:35java二维码生成 带logo生成的。 里边有jar包,引用后直接使用,个人测试已OK并应用到系统中
收藏数
4,782
精华内容
1,912