Vue+Java+Base64实现条码解析的示例


Posted in Javascript onSeptember 23, 2020

前端部分(Vue + Vant)

  • 引入Vant、使用Vant中的Uploader组件上传文件(支持手机拍照)
import Vue from 'vue' 
import { Uploader } from 'vant' 
Vue.use(Uploader);
  • 使用Uploader上传组件
<van-uploader>
  <van-button icon="plus" type="primary" :after-read="afterRead">    
   上传文件(识别条码)
 </van-button>
 </van-uploader>
  • js部分、文件上传完毕后会触发 after-read 回调函数,获取到对应的 file 对象。
afterRead(file) {
  var self = this;
  //调用上传回调函数 - upload
  this.upLoad(this.$baseUrl + "upload/uploadParsing", file,
  function (response) {
    if( response.msg.length >0){
     console.log(response.msg)
    }else{
      Toast.fail('识别失败,请重新上传条码!',3500)
    }
   });  

 },
 
 upLoad(url, file, func) {
    var fileBase64 =''
    // 创建Canvas对象(画布)
    debugger
    let canvas = document.createElement("canvas");
    // 获取对应的CanvasRenderingContext2D对象(画笔)
    let context = canvas.getContext("2d");
    // 创建新的图片对象
    let img = new Image();
    // 指定图片的DataURL(图片的base64编码数据)
    img.src = file.content;
    // 监听浏览器加载图片完成,然后进行进行绘制
    img.onload = () => {
      // 指定canvas画布大小,该大小为最后生成图片的大小
      canvas.width = 400;
      canvas.height = 300;
      /* drawImage画布绘制的方法。(0,0)表示以Canvas画布左上角为起点,400,300是将图片按给定的像素进行缩小。
      如果不指定缩小的像素图片将以图片原始大小进行绘制,图片像素如果大于画布将会从左上角开始按画布大小部分绘制图片,最后的图片就是张局部图。*/
 
      context.drawImage(img, 0, 0, 400, 300);
      // 将绘制完成的图片重新转化为base64编码,file.file.type为图片类型,0.92为默认压缩质量
      file.content = canvas.toDataURL(file.file.type, 0.92);
      fileBase64 = file.content
      // 最后将base64编码的图片保存到数组中,留待上传。43      console.log(fileBase64)
      //查询字典值
      this.$axios.post(url,{'fileBase64Code' :fileBase64})
      .then(function (response) {
       func(response.data);
      }.bind(this))
      .catch(function (error) {
        Toast.file("识别失败,请重新上传条码!",3500);
      })
   };
 },

后端部分(Java )

添加 zxing + base64 依赖

<!-- 解析二维码 -->
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>core</artifactId>
    <version>3.3.3</version>
  </dependency>
  <dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>javase</artifactId>
    <version>3.3.3</version>
  </dependency>


  <!-- Base64 -->
  <!-- https://mvnrepository.com/artifact/net.iharder/base64 -->
  <dependency>
    <groupId>net.iharder</groupId>
    <artifactId>base64</artifactId>
    <version>2.3.8</version>
  </dependency>

Controller

@ResponseBody

@RequestMapping(value = "/uploadParsing", method = RequestMethod.POST)

public ResponseMessage uploadParsing(@RequestBody imgUploadMessage uploadFile){
    ResponseMessage rm=new ResponseMessage();
    //解析Base64编码之后 读取条
    try {
      String imgStr = uploadFile.getFileBase64Code().substring(uploadFile.getFileBase64Code().indexOf(",")+1);
      Decoder decoder = Base64.getDecoder();
      byte[] base = decoder.decode(imgStr);
      for (int i = 0; i < base.length; ++i) {
        if (base[i] < 0) {
          base[i] += 256;
        }
      }
       ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(base);
       BufferedImage read = ImageIO.read( byteArrayInputStream);
        if (null==read) {
          rm.setMsg("解析失败");
          rm.setSuccess(false);
          return rm;
        }
        BufferedImageLuminanceSource source = new BufferedImageLuminanceSource(read);
        BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
        Map<DecodeHintType,Object> hints=new HashMap<>();
        hints.put(DecodeHintType.CHARACTER_SET,"GBK");
        hints.put(DecodeHintType.PURE_BARCODE,Boolean.TRUE);
        hints.put(DecodeHintType.TRY_HARDER,Boolean.TRUE);
  
        Result decode = new MultiFormatReader().decode(bitmap, hints);
        log.debug("条形码的内容是:" + decode.getText());
        rm.setMsg(decode.getText());
       
      } catch (Exception e) {
        e.printStackTrace();
        log.debug("解析失败:",e);
        rm.setSuccess(false);
        rm.setMsg("解析失败");
      }
     return rm;
  }

以上就是Vue+Java+Base64实现条码解析的示例的详细内容,更多关于Vue+Java+Base64实现条码解析的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
用cookies实现的可记忆的样式切换效果代码下载
Dec 24 Javascript
html向js方法传递参数具体实现
Aug 08 Javascript
Jquery 点击按钮自动高亮实现原理及代码
Apr 25 Javascript
15款jQuery分布引导插件分享
Feb 04 Javascript
avalonjs实现仿微博的图片拖动特效
May 06 Javascript
jfinal与bootstrap的登录跳转实战演习
Sep 22 Javascript
JS中对象与字符串的互相转换详解
May 20 Javascript
Bootstrap导航条的使用和理解3
Dec 14 Javascript
使用vue.js在页面内组件监听scroll事件的方法
Sep 11 Javascript
微信小程序常用简易小函数总结
Feb 01 Javascript
原生js通过一行代码实现简易轮播图
Jun 05 Javascript
微信小程序点击view动态添加样式过程解析
Jan 21 Javascript
通过实例解析jQ Ajax操作相关原理
Sep 23 #Javascript
js实现三角形粒子运动
Sep 22 #Javascript
js操作两个json数组合并、去重,以及删除某一项元素
Sep 22 #Javascript
js实现删除json中指定的元素
Sep 22 #Javascript
vue使用canvas实现移动端手写签名
Sep 22 #Javascript
JSON 入门教程基础篇 json入门学习笔记
Sep 22 #Javascript
Vue+Java 通过websocket实现服务器与客户端双向通信操作
Sep 22 #Javascript
You might like
9个PHP开发常用功能函数小结
2011/07/15 PHP
如何用php获取程序执行的时间
2013/06/09 PHP
php实现利用phpexcel导出数据
2013/08/24 PHP
ioncube_loader_win_5.2.dll的错误解决方法
2015/01/04 PHP
php输出指定时间以前时间格式的方法
2015/03/21 PHP
Jquery ajax不能解析json对象,报Invalid JSON错误的原因和解决方法
2010/03/27 Javascript
当鼠标移动到图片上时跟随鼠标显示放大的图片效果
2013/06/06 Javascript
使用Js让Html中特殊字符不被转义
2013/11/05 Javascript
JQuery中阻止事件冒泡几种方式及其区别介绍
2014/01/15 Javascript
浅析jQuery 3.0中的Data
2016/06/14 Javascript
JS比较两个数值的大小实例
2016/11/25 Javascript
如何制作幻灯片(代码分享)
2017/01/06 Javascript
Bootstrap常用组件学习(整理)
2017/03/24 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
2017/06/30 Javascript
详解如何使用webpack在vue项目中写jsx语法
2017/11/08 Javascript
微信小程序自定义多选事件的实现代码
2018/05/17 Javascript
单页面vue引入百度统计的使用方法示例详解
2018/10/13 Javascript
关于layui的动态图标不显示的解决方法
2019/09/04 Javascript
JS前端广告拦截实现原理解析
2020/02/17 Javascript
Vue 封装防刷新考试倒计时组件的实现
2020/06/05 Javascript
vue 监听 Treeselect 选择项的改变操作
2020/08/31 Javascript
[01:17:47]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
浅谈Python实现Apriori算法介绍
2017/12/20 Python
用Python逐行分析文件方法
2019/01/28 Python
Python中常见的数制转换有哪些
2020/05/27 Python
如何理解Python中的变量
2020/06/01 Python
python编写一个会算账的脚本的示例代码
2020/06/02 Python
容易被忽略的Python内置类型
2020/09/03 Python
英国在线女鞋目的地:SIMMI
2018/12/27 全球购物
Perfume’s Club英国官网:购买香水和护肤品
2019/11/02 全球购物
高中同学聚会邀请函
2014/01/11 职场文书
药店促销活动总结
2014/07/10 职场文书
党委书记个人检查对照材料思想汇报
2014/10/11 职场文书
编写python程序的90条建议
2021/04/14 Python
用python删除文件夹中的重复图片(图片去重)
2021/05/12 Python
详解MySQL中的主键与事务
2021/05/27 MySQL