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 相关文章推荐
麦鸡的TAB切换功能结合了javascript和css
Dec 17 Javascript
javascript入门基础之私有变量
Feb 23 Javascript
js获取系统的根路径实现介绍
Sep 08 Javascript
解决jquery插件冲突的问题
Jan 23 Javascript
JS实现的适合做faq或menu滑动效果示例
Nov 17 Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
Dec 16 Javascript
js+div+css下拉导航菜单完整代码分享
Dec 28 Javascript
js实现文字列表无缝滚动效果
Jun 23 Javascript
JavaScript屏蔽Backspace键的实现代码
Nov 02 Javascript
微信小程序实现获取用户信息并存入数据库操作示例
May 07 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
Jan 18 Javascript
vue 子组件修改data或调用操作
Aug 07 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
PHP中file_exists函数不支持中文名的解决方法
2014/07/26 PHP
Yii把CGridView文本框换成下拉框的方法
2014/12/03 PHP
PHP实现提高SESSION响应速度的几种方法详解
2019/08/09 PHP
使用Entrust扩展包在laravel 中实现RBAC的功能
2020/03/16 PHP
关于全局变量和局部变量的那些事
2013/01/11 Javascript
jQuery实现默认是闭合的FAQ展开效果菜单
2015/09/14 Javascript
微信小程序 下拉菜单简单实例
2017/04/13 Javascript
鼠标拖动改变DIV等网页元素的大小的实现方法
2017/07/06 Javascript
关于JavaScript语句后面的分号问题
2017/12/07 Javascript
Angular实现下拉框模糊查询功能示例
2018/01/03 Javascript
node.js express框架实现文件上传与下载功能实例详解
2019/10/15 Javascript
使用原生javascript开发计算器实例代码
2021/02/21 Javascript
[01:37]DOTA2超级联赛专访ChuaN 传奇般的电竞之路
2013/06/19 DOTA
[02:03]《现实生活中的DOTA2》—林书豪&DOTA2职业选手出演短片
2015/08/18 DOTA
python实现自动更换ip的方法
2015/05/05 Python
Python编写电话薄实现增删改查功能
2016/05/07 Python
使用Python对Excel进行读写操作
2017/03/30 Python
Python读取Json字典写入Excel表格的方法
2018/01/03 Python
Django实现组合搜索的方法示例
2018/01/23 Python
python爬虫 爬取超清壁纸代码实例
2019/08/16 Python
在python中做正态性检验示例
2019/12/09 Python
python基于property()函数定义属性
2020/01/22 Python
python操作yaml说明
2020/04/08 Python
Python pip install如何修改默认下载路径
2020/04/29 Python
Python Json数据文件操作原理解析
2020/05/09 Python
python 指定源路径来解决import问题的操作
2021/03/04 Python
带你认识HTML5中的WebSocket
2015/05/22 HTML / CSS
世界最大的私人旅行指南出版商:孤独星球
2016/08/23 全球购物
意大利奢华内衣制造商:Cosabella
2017/08/29 全球购物
大学生就业自荐信
2013/10/26 职场文书
室内设计专业学生的自我评价分享
2013/11/27 职场文书
销售部主管岗位职责
2013/12/18 职场文书
农村结婚典礼司仪主持词
2014/03/14 职场文书
学员自我鉴定
2014/03/19 职场文书
医院合作协议书
2014/08/19 职场文书
Python 类,对象,数据分类,函数参数传递详解
2021/09/25 Python