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 相关文章推荐
jquery中的$(document).ready()与window.onload的区别
Nov 18 Javascript
Dom在ajax技术中的作用说明
Oct 25 Javascript
jQuery编辑器KindEditor4.1.4代码高亮显示设置教程
Mar 01 Javascript
window.location不跳转的问题解决方法
Apr 17 Javascript
JQuery点击事件回到页面顶部效果的实现代码
May 24 Javascript
Javascript 闭包详解及实例代码
Nov 30 Javascript
Vue结合原生js实现自定义组件自动生成示例
Jan 21 Javascript
jQuery插件FusionCharts实现的2D柱状图效果示例【附demo源码下载】
Mar 06 Javascript
浅谈JS中的反柯里化( uncurrying)
Aug 17 Javascript
Vue中对比scoped css和css module的区别
May 17 Javascript
详解SPA中前端路由基本原理与实现方式
Sep 12 Javascript
Element Breadcrumb 面包屑的使用方法
Jul 26 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开发留言板的CRUD(增,删,改,查)操作
2012/04/19 PHP
使用array mutisort 实现按某字段对数据排序
2013/06/18 PHP
PHP资源管理框架Assetic简介
2014/06/12 PHP
destoon文章模块调用企业会员资料的方法
2014/08/22 PHP
安装ImageMagick出现error while loading shared libraries的解决方法
2014/09/23 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
2017/12/31 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
浅谈php调用python文件
2019/03/29 PHP
使用jscript实现二进制读写脚本代码
2008/06/09 Javascript
javascript的trim,ltrim,rtrim自定义函数
2008/09/21 Javascript
javascript 面向对象全新理练之继承与多态
2009/12/03 Javascript
关于jQuery UI 使用心得及技巧
2012/10/10 Javascript
jQuery获取和设置表单元素的方法
2014/02/14 Javascript
js中的cookie的读写操作示例详解
2014/04/17 Javascript
JavaScript编程中布尔对象的基本使用
2015/10/25 Javascript
JS实现的页面自定义滚动条效果
2015/10/26 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
2016/09/18 Javascript
在Vue methods中调用filters里的过滤器实例
2018/08/30 Javascript
Vue.js实现表格渲染的方法
2018/09/07 Javascript
vue删除html内容的标签样式实例
2018/09/13 Javascript
简单说说angular.json文件的使用
2018/10/29 Javascript
python自动化测试之setUp与tearDown实例
2014/09/28 Python
python实现的简单抽奖系统实例
2015/05/22 Python
Python实现TCP协议下的端口映射功能的脚本程序示例
2016/06/14 Python
python获取list下标及其值的简单方法
2016/09/12 Python
用python找出那些被“标记”的照片
2017/04/20 Python
Python实现的中国剩余定理算法示例
2017/08/05 Python
使用pandas读取csv文件的指定列方法
2018/04/21 Python
设置python3为默认python的方法
2018/10/31 Python
Python字典的核心底层原理讲解
2019/01/24 Python
Python元组知识点总结
2019/02/18 Python
python实现简单聊天室功能 可以私聊
2019/07/12 Python
HMV日本官网:全球知名的音乐、DVD和电脑游戏零售巨头
2016/08/13 全球购物
助学贷款贫困证明
2014/09/23 职场文书
社区环境卫生倡议书
2015/04/29 职场文书
买卖合同纠纷代理词
2015/05/25 职场文书