maven依赖

<!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.4.0</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.4.0</version></dependency>
<!--       驱动摄像头 --><dependency><groupId>com.github.sarxos</groupId><artifactId>webcam-capture</artifactId><version>0.3.12</version></dependency>

二维码工具类


import com.google.zxing.*;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.Hashtable;/*** zh:二维码生成工具类* en:QR code generation tool class** @author hjj* @date 2021/07/30*/
public class QrCodeUtil {/***  二维码尺寸* */public static final int QRCODE_SIZE = 500;/*** 二维码图片转Base64字符串** @param content    二维码携带信息* @return  Base64字符串*/public static String ImageTurnBase64(String content) {return createQrCodeBase64(content, QRCODE_SIZE);}/*** 创建二维码图片文件** @param content    二维码携带信息*/public static void createQrCodeImage(String content) {createQrCodeImage(content, QRCODE_SIZE,"C:\\"+content+".jpg");}/*** 创建二维码图片** @param content    二维码携带信息* @param qrCodeSize 二维码图片大小* @return  Base64字符串*/private static String createQrCodeBase64(String content, int qrCodeSize) {ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();try {BufferedImage image = createQrCode(content, qrCodeSize);//转换成png格式的IO流ImageIO.write(image, "png", byteArrayOutputStream);} catch (Exception e) {e.printStackTrace();}byte[] bytes = byteArrayOutputStream.toByteArray();BASE64Encoder encoder = new BASE64Encoder();String base64 = encoder.encodeBuffer(bytes).trim();base64 = "data:image/png;base64," + base64;return base64;}/*** 创建二维码图片** @param content    二维码携带信息* @param qrCodeSize 二维码图片大小* @param filePath   生成的二维码图片的保存的路径*/public static void createQrCodeImage(String content, int qrCodeSize, String filePath) {try {BufferedImage bi = createQrCode(content, qrCodeSize);File imgFile = new File(filePath);ImageIO.write(bi, "JPEG", imgFile);} catch (Exception e) {e.printStackTrace();}}/*** 生成包含字符串信息的二维码图片** @param content    二维码携带信息* @param qrCodeSize 二维码图片大小*/public static BufferedImage createQrCode(String content, int qrCodeSize) {if (null == content)return null;try {// 设置二维码纠错级别MapHashtable<EncodeHintType, Object> hintMap = new Hashtable<>();// 矫错级别hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);hintMap.put(EncodeHintType.CHARACTER_SET, "utf-8");QRCodeWriter qrCodeWriter = new QRCodeWriter();// 创建比特矩阵(位矩阵)的QR码编码的字符串BitMatrix byteMatrix = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, qrCodeSize, qrCodeSize, hintMap);// 使BufferedImage勾画QRCode  (matrixWidth 是行二维码像素点)int matrixWidth = byteMatrix.getWidth();int matrixHeight = byteMatrix.getWidth();BufferedImage image = new BufferedImage(matrixWidth - 65, matrixWidth - 65, BufferedImage.TYPE_INT_RGB);image.createGraphics();Graphics2D graphics = (Graphics2D) image.getGraphics();graphics.setColor(Color.WHITE);graphics.fillRect(0, 0, matrixWidth, matrixHeight);// 使用比特矩阵画并保存图像graphics.setColor(Color.BLACK);for (int i = 0; i < matrixWidth; i++) {for (int j = 0; j < matrixWidth; j++) {if (byteMatrix.get(i, j)) {graphics.fillRect(i - 33, j - 33, 2, 2);}}}return image;} catch (Exception e) {e.printStackTrace();return null;}}public static String parseQRCode(File file) {BufferedImage bufferedImage = null;try {bufferedImage = ImageIO.read(file);} catch (IOException e) {e.printStackTrace();}LuminanceSource source = new BufferedImageLuminanceSource(bufferedImage);BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));Hashtable<DecodeHintType, String> hints = new Hashtable<DecodeHintType, String>();hints.put(DecodeHintType.CHARACTER_SET, "utf-8");Result result = null;try {result = new MultiFormatReader().decode(bitmap, hints);System.out.println(result.toString());return result.toString();} catch (NotFoundException e) {e.printStackTrace();}return null;}/*** 解析二维码** @param qrCodeImage 二维码图片* @param charset     字符集(包含中文建议使用UTF-8)* @return 解析后二维码内容*/public static String parseQRCode(BufferedImage qrCodeImage, String charset) throws Exception {if (null == qrCodeImage)return null;// 解码设置Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();hints.put(DecodeHintType.CHARACTER_SET, charset); // 设定字符集// 图像解析为亮度源BufferedImageLuminanceSource luminanceSource = new BufferedImageLuminanceSource(qrCodeImage);// 亮度源解析为二进制位图BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(luminanceSource));// 二维码解码Result result = new MultiFormatReader().decode(bitmap, hints);// 解析后二维码内容return result.getText();}/*** @Description: base64字符串转化成图片* @param:     imgStr  Base64字符串* @param:      photoname 图片名称* @Return:    路径地址*/public static String Base64TurnImage(String imgStr,String photoname){//对字节数组字符串进行Base64解码并生成图片//图像数据为空if (imgStr == null)return "";BASE64Decoder decoder = new BASE64Decoder();try{//Base64解码byte[] b = decoder.decodeBuffer(imgStr);for(int i=0;i<b.length;++i){if(b[i]<0){//调整异常数据b[i]+=256;}}//生成jpeg图片String imagePath= "F:\\";//System.currentTimeMillis()//新生成的图片String imgFilePath = imagePath+photoname+".png";OutputStream out = new FileOutputStream(imgFilePath);out.write(b);out.flush();out.close();return imgFilePath;}catch (Exception e){return e.getMessage();}}/*** @Description: 解析二维码base64字符串* @param:     imgStr  Base64字符串* @return 解析后内容* */public static String Base64TurnQrCode(String imgStr) {//对字节数组字符串进行Base64解码并生成图片//图像数据为空if (imgStr == null)return "";BASE64Decoder decoder = new BASE64Decoder();try {//Base64解码byte[] b = decoder.decodeBuffer(imgStr);for (int i = 0; i < b.length; ++i) {if (b[i] < 0) {//调整异常数据b[i] += 256;}}ByteArrayInputStream bais = new ByteArrayInputStream(b);// 字节转图片BufferedImage bufferedImage = ImageIO.read(bais);// 解析图片结果return parseQRCode(bufferedImage, "UTF-8");}catch (Exception e){e.printStackTrace();}return "";}}

测试

public static void main(String[] args) throws Exception{while (true){//设置摄像头拍照大小 建议摄像头像素500W以上Dimension[] nonStandardResolutions = new Dimension[] {WebcamResolution.PAL.getSize(),WebcamResolution.HD.getSize(),new Dimension(4000, 2000),new Dimension(2000, 1000),};Webcam webcam = Webcam.getDefault();webcam.setCustomViewSizes(nonStandardResolutions);webcam.setViewSize(WebcamResolution.HD.getSize());webcam.open();File file = new File("D:\\GitProjects\\hello-world.png");//照片存放地址ImageIO.write(webcam.getImage(), "PNG", file);Thread.sleep(3000);QrCodeUtil qrCodeUtil = new QrCodeUtil();String res = qrCodeUtil.parseQRCode(file);//解析二维码 返回二维码的数据System.out.println(res);Thread.sleep(5000);}}

连接摄像头拍照并识别图片中二维码相关推荐

  1. JAVA 识别图片中二维码 opencv 识别精准

    JAVA 识别图片中二维码 opencv 识别精准 文章目录 JAVA 识别图片中二维码 opencv 识别精准 一.添加依赖 二.依赖配置 三.测试类 四.结果 提示:以下是本篇文章正文内容,下面案 ...

  2. 讨论一下微信小程序中如何长按识别图片中二维码跳转

    [一].image标签展示二维码 目前微信官方支持小程序原生页面在微信版本IOS≥8.0.6,安卓≥8.0.3时直接长按识别二维码, <image src="二维码图片地址" ...

  3. 仿商城商品生成分享海报图片和识别图中二维码并跳转商品详情页

    购物商城里面的商品分享给朋友的时候会生成一张海报图片,图片上附带这二维码图片,朋友拿到这张图片扫描上面的二维码就可以进入商品详情页查看此商品了.今天来做一下这种功能,先生成商品海报图片,然后长按这张图 ...

  4. Vue实现长按图片识别图中二维码

    Vue实现长按图片识别图中二维码 思路:要想实现可以识别图片中的二维码,那必定是要将这张图进行上传操作,上传则需要file对象格式.不管是在H5还是APP中,展示的图片都是通过url的方式展示在img ...

  5. cocoscreator实现微信内置浏览器点击图片识别图中二维码

    最近在做一个微信内置浏览器的小游戏,小游戏中有一个二维码,需要用户点击长按二维码弹出系统识别二维码按钮. 下面是解决步骤: 1.cocoscreator是如何实现在浏览器中渲染游戏画面的 看图中箭头处 ...

  6. 摄像头拍照及解析QR二维码

    此项目用C#实现了摄像头拍照及解析QR二维码,下面附上测试截图及部分源码: 拍照功能: 解析电脑拍摄的2D图片,能够正确显示文本信息 using System; using System.Collec ...

  7. Android实现二维码扫描功能-ZXing识别图片二维码,相册选图

    文章目录 1.演示 2.权限问题 3.实现步骤 4.工具类 5.图片Uri处理(重要更新) 1.演示 2.权限问题 部分朋友在打开相册时遇到读写权限未授权的问题,我在开发的时候没有遇到,也没有注册读写 ...

  8. 小程序: 长按识别图中二维码

    在小程序项目中,有时候我们需要按住二维码,弹出: 识别图中二维码的功能 1. API 小程序文档 - API - 媒体 - 图片 - perviewImage( ) :  在新页面中全屏预览图片.预览 ...

  9. Zxing识别图中二维码实践

    参考网上文章,做如下实践. implementation('com.journeyapps:zxing-android-embedded:3.6.0') { transitive = false } ...

  10. android仿微信识别相册中二维码图片信息

    仿照微信识别相册中二维码,写了一个Demo,供参考使用 1.添加依赖,基于zxing,使用了Glide选择的图片进行了显示 compile 'com.google.zxing:core:3.2.1'c ...

最新文章

  1. Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow pip命令...
  2. impdp的一些实际问题解决方法
  3. iphone视图放大_如何将iPhone用作放大镜
  4. Java LinkedHashMap forEach()方法与示例
  5. linux下环境变量PATH的用法
  6. java下载好怎么验证_Java JDK下载、安装和验证
  7. navicat远程连接mysql,2003 can't connect to mysql server on 10038
  8. fabric1.0 java sdk_运行 fabric-sdk-java 官方示例
  9. 30+免费快速启动工具软件下载
  10. 矩阵相关定义性质全总结
  11. jquery dialog 打开的时候自动聚焦解决方法
  12. 更新谷歌浏览器最新版后 Access to XMLHttpRequest at 跨域问题解决方法
  13. 甘谷2021年高考成绩查询入口,筑梦百天,赢在高考|甘谷一中2021届高考百日誓师大会...
  14. 荣耀30青春版发布 简单说说有哪些亮点
  15. [Python]_[初级]_[使用PyCharm时不识别根包位置和Debug时报ModuleNotFoundError错误]
  16. Linux下串口编程总结
  17. 【Android安全】AOSP与GMS | 安卓开源
  18. 做裂变新增全靠运气吗?绝对不是哦!
  19. 庆生二十年 2018爱普生创新大会在京举行
  20. 中国涡轮盘拉床市场现状研究分析与发展前景预测报告(2022)

热门文章

  1. 数据科学 IPython 笔记本 8.16 地理数据和 Basemap
  2. easyui表格 序号如何进行自适应宽度
  3. http协议中的1xx,2xx,3xx,4xx,5xx状态码分别表示什么?列举常见错误码及含义
  4. linux修改dns教程,修改Centos的DNS地址
  5. xp系统steam无法连接到更新服务器,xp系统打不开steam提示“无法链接至steam网络”的处理办法...
  6. koa教程--busboy模块
  7. 2021-09-30 node上传文件的问题以及如何选择适合自己的插件
  8. 中缀/后缀/前缀表达式及相互转换的手算详细步骤及C代码实现
  9. 霸榜11个月,神车MINI EV进退两难!
  10. html怎么把图片的图层,PS制作-把图片添加到图层的4种方法