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与window以及load与ready 区别详解
Dec 29 Javascript
使用jQuery实现Web页面换肤功能的要点解析
May 12 Javascript
jQuery实现调整表格单列顺序完整实例
Jun 20 Javascript
基于js中的原型、继承的一些想法
Aug 10 Javascript
AngularJS入门教程之过滤器详解
Aug 19 Javascript
DOM 事件的深入浅出(二)
Dec 05 Javascript
轻松实现jQuery添加删除按钮Click事件
Mar 13 Javascript
js仿微信公众平台打标签功能
Apr 08 Javascript
Node.Js生成比特币地址代码解析
Apr 21 Javascript
详解微信小程序自定义组件的实现及数据交互
Jul 22 Javascript
浅谈vue项目用到的mock数据接口的两种方式
Oct 09 Javascript
详解vue beforeEach 死循环问题解决方法
Feb 25 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
smarty section简介与用法分析
2008/10/03 PHP
php的SimpleXML方法读写XML接口文件实例解析
2014/06/16 PHP
php实现的Captcha验证码类实例
2014/09/22 PHP
php验证码生成代码
2015/11/11 PHP
PHP浮点数的一个常见问题
2016/03/10 PHP
PHP数据库编程之MySQL优化策略概述
2017/08/16 PHP
jQuery效果 slideToggle() 方法(在隐藏和显示之间切换)
2011/06/28 Javascript
javascript学习(一)构建自己的JS库
2013/01/02 Javascript
JavaScript实现QueryString获取GET参数的方法
2013/07/02 Javascript
jquery事件preventDefault()方法用法实例
2015/01/16 Javascript
text-align:justify实现文本两端对齐 兼容IE
2015/08/19 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
jquery validate表单验证的基本用法入门
2016/01/18 Javascript
谈一谈javascript闭包
2016/01/28 Javascript
谈谈PHP中相对路径的问题与绝对路径的使用
2016/08/16 Javascript
基于vue2.0+vuex+localStorage开发的本地记事本示例
2017/02/28 Javascript
纯原生js实现贪吃蛇游戏
2020/04/16 Javascript
超级简易的JS计算器实例讲解(实现加减乘除)
2017/08/08 Javascript
微信小程序页面缩放式侧滑效果的实现代码
2018/11/15 Javascript
使用p5.js实现动态GIF图片临摹重现
2019/10/23 Javascript
Javascript异步编程async实现过程详解
2020/04/02 Javascript
在vue中实现给每个页面顶部设置title
2020/07/29 Javascript
Python使用ftplib实现简易FTP客户端的方法
2015/06/03 Python
Python中的元组介绍
2019/01/28 Python
python实现beta分布概率密度函数的方法
2019/07/08 Python
Django的Modelforms用法简介
2019/07/27 Python
python sklearn常用分类算法模型的调用
2019/10/16 Python
使用分层画布来优化HTML5渲染的教程
2015/05/08 HTML / CSS
美国台面电器和厨具品牌:KitchenAid
2019/04/12 全球购物
Java的接口和C++的虚类的相同和不同处
2014/03/27 面试题
社团文化节邀请函
2014/01/10 职场文书
法定代表人授权委托书范文
2014/09/22 职场文书
2015年保送生自荐信
2015/03/24 职场文书
幼儿园中班教学反思
2016/03/03 职场文书
Python面向对象之成员相关知识总结
2021/06/24 Python
了解Kubernetes中的Service和Endpoint
2022/04/01 Servers