【java】二维码的生成和使用
来源:互联网 发布:域名公安局备案 编辑:程序博客网 时间:2024/06/07 07:16
maven 依赖:
使用google的zxing包
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.2.0</version>
</dependency>
工具类代码:
package com.kaiyuan.kp.kyshop.app.twoDimensionCode;
import java.awt.BasicStroke;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Path;
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.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
/**
*
*二维码生成工具类(ZXing)
*/
public class TwoDimensionCodeUtil {
/**
* 生成二维码(ZXing)图片 ,编码默认UTF-8
* @param content 二维码内容
* @param path 文件存储路径,不包括文件名称
* @param fileName 文件名称,不加后缀
* @param imageType 图片类型
* @param width 宽度
* @param height 高度
*/
public static void encoderTwoDimensionCodeToFile(String content,String path,String fileName,String imageType,int width,int height){
MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
Map<EncodeHintType,String> hints = new HashMap<EncodeHintType,String>();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
try {
BitMatrix bitMatrix = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, width, height,hints);
Path filepath = new File(path+fileName+"."+imageType).toPath();
MatrixToImageWriter.writeToPath(bitMatrix, imageType, filepath);
} catch (Exception e){
e.printStackTrace();
}
}
/**
* 将二维码输出到流,编码默认UTF-8
* @param content 二维码内容
* @param imageType 图片类型
* @param width 宽度
* @param height 高度
* @param out 输出流
*/
public static void encoderTwoDimensionCodeToStream(String content,String imageType,int width,int height,OutputStream out){
MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
Map<EncodeHintType,String> hints = new HashMap<EncodeHintType,String>();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
try {
BitMatrix bitMatrix = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, width, height,hints);
MatrixToImageWriter.writeToStream(bitMatrix, imageType, out);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 生成带logo的二维码图片流
* @param content
* @param imageType
* @param width
* @param height
* @param out
*/
public static void encoderLogoTwoDimensionCodeToStream(String content,String imageType,int width,int height,OutputStream out){
MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
Map<EncodeHintType,String> hints = new HashMap<EncodeHintType,String>();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
ByteArrayOutputStream o1 =new ByteArrayOutputStream();
try {
BitMatrix bitMatrix = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, width, height,hints);
MatrixToImageWriter.writeToStream(bitMatrix, imageType, o1);
} catch (Exception e) {
e.printStackTrace();
}
ByteArrayInputStream in = new ByteArrayInputStream(o1.toByteArray());
encoderLogoTwoDimensionCodeToStream( in, new File("d:/logo.jpg"), imageType, new LogoConfig(), out);
}
public static void encoderLogoTwoDimensionCodeToStream(InputStream in, File logoPic,String imageType, LogoConfig logoConfig,OutputStream out)
{
try
{
/**
* 读取二维码图片,并构建绘图对象
*/
BufferedImage image = ImageIO.read(in);
Graphics2D g = image.createGraphics();
/**
* 读取Logo图片
*/
BufferedImage logo = ImageIO.read(logoPic);
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();
ImageIO.write(image, imageType, out);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
使用方式:
String content = httpRequest.getParameter("content"); //二维码映射的实际Url
String imageType = httpRequest.getParameter("imageType"); //图片类型
int width = Integer.parseInt(httpRequest.getParameter("width")); //二维码宽
int height = Integer.parseInt(httpRequest.getParameter("height")); //二维码高
if (Strings.isNullOrEmpty(content)) {
LOGGER.warn("The content is null or empty");
return (T) new Result(StatusCodes.BAD_REQUEST, false);
}
httpResponse.setContentType("image/jpg");
try {
TwoDimensionCodeUtil.encoderTwoDimensionCodeToStream(content, imageType, width, height,
httpResponse.getOutputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
页面使用返回的流:
html:
<img id="Img" src="" />
js:
var src = encodeURI("/twoDimensionCode/erweima?content=www.baidu.com&imageType=jpg&width=25&height=25");
$("#Img").attr("src",src);
$("#Img").attr("src",src);
1 0
- 【java】二维码的生成和使用
- 使用JAVA生成二维码
- 使用Java生成二维码
- java生成二维码、条形码和二维码、条形码的解码
- java生成二维码、条形码和二维码、条形码的解码
- java实现二维码的生成和解析。
- java实现二维码的生成和解析
- Java实现二维码-使用Zxing生成二维码
- 使用ZXing扫描二维码和生成二维码
- java生成二维码和解析二维码
- JAVA生成二维码和解析二维码
- 二维码的应用,扫描二维码和生成二维码,使用回传值,导入依赖
- 二维码的应用,扫描二维码和生成二维码,使用回传值,导入依赖
- java 使用zxing 生成二维码
- java 使用zxing生成二维码
- java 使用zxing 生成二维码
- java使用zxing生成二维码
- 【JAVA】使用ZXing生成二维码
- 中间件技术介绍整理
- 堆栈溢出问题 test dword ptr [eax],eax probe page.
- Linux 环境配置
- kaggle实战之Titanic(2)-分类器的选择与实现
- java回调函数的使用
- 【java】二维码的生成和使用
- 工作流引擎Activiti使用自我总结
- 关于切圆角的性能问题
- leetcode 292 Nim Game JAVA
- Official Program for CVPR 2015
- SqlServer & Windows 可更新订阅立即更新启用分布式事务协调器(MSDTC)
- VERILOG实现四位七段数码管显示
- Java Nio 十、Java NIO ServerSocketChannel
- github备忘录啊,整理的相当不错,好好好,非常好