前端部分(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">
    上传文件(s识别条码)
    </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 = () => {
    debugger
    // 指定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编码的图片保存到数组中,留待上传。
    debugger
    alert(fileBase64)
    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>
  • @ResponseBody
    @LoginToken(required = false)
    @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();
    rm.setSuccess(false);
    rm.setMsg("解析失败");
    }
    return rm;
    }

Vue+Java+Base64实现条码解析的更多相关文章

  1. 转:在java中使用dom4j解析xml

    JAVA 使用Dom4j 解析XML Java DOM4J Parser - Parse XML Document Dom4j下载及使用Dom4j读写XML简介 在java中使用dom4j解析xml ...

  2. android Java BASE64编码和解码二:图片的编码和解码

    1.准备工作 (1)在项目中集成 Base64 代码,集成方法见第一篇博文:android Java BASE64编码和解码一:基础 (2)添加 ImgHelper 工具类 package com.a ...

  3. Java Base64加密、解密原理Java代码

    Java Base64加密.解密原理Java代码 转自:http://blog.csdn.net/songylwq/article/details/7578905 Base64是什么: Base64是 ...

  4. 【转】Java HashMap 源码解析(好文章)

    ­ .fluid-width-video-wrapper { width: 100%; position: relative; padding: 0; } .fluid-width-video-wra ...

  5. Flex与Java交互(Flex调用java类展示数据)解析xml展示数据

    Flex与java通信最简单例子(详细说明了各种需要注意的配置):http://blog.csdn.net/u010011052/article/details/9116869 Flex与java通信 ...

  6. java微信开发API解析(二)-获取消息和回复消息

    java微信开发API解析(二)-获取消息和回复消息 说明 * 本演示样例依据微信开发文档:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/20 ...

  7. JAVA中生成、解析二维码图片的方法

    JAVA中生成.解析二维码的方法并不复杂,使用google的zxing包就可以实现.下面的方法包含了生成二维码.在中间附加logo.添加文字功能,并有解析二维码的方法. 一.下载zxing的架包,并导 ...

  8. Java集合类源码解析:Vector

    [学习笔记]转载 Java集合类源码解析:Vector   引言 之前的文章我们学习了一个集合类 ArrayList,今天讲它的一个兄弟 Vector.为什么说是它兄弟呢?因为从容器的构造来说,Vec ...

  9. java后台常用json解析工具问题小结

    若排版紊乱可查看我的个人博客原文地址 java后台常用json解析工具问题小结 这里不细究造成这些问题的底层原因,只是单纯的描述我碰到的问题及对应的解决方法 jackson将java对象转json字符 ...

随机推荐

  1. N叉树的前后序遍历和最大深度

    package NTree; import java.util.ArrayList; import java.util.List; /** * N叉树的前后序遍历和最大深度 */ public cla ...

  2. Vue生命周期,我奶奶看了都懂了

    最近一直在学习Vue,而vue生命周期是我们不可能绕开的一个很核心的知识点,今天来简单的梳理一下大概的内容. 一.钩子函数 在一开始学习的时候,总有钩子函数这个名词冒出来,而且在vue官网文档中也频繁 ...

  3. 个人项目WordCount(C++/QT)

    个人项目WordCount(C++/QT) GitHub项目地址:https://github.com/Nova-cjp/Word-Count 百度云链接:https://pan.baidu.com/ ...

  4. 为何要做seo关键词排名

    http://www.wocaoseo.com/thread-229-1-1.html 武汉seo百度指数在150左右,做seo的同仁们都知道这样的一件事情. 真正搜索武汉seo关键词能作为潜在客户的 ...

  5. day41:MYSQL:select查询练习题

    目录 1.表结构 2.创建表和插入数据 3.习题 1.表结构 2.建表和插入数据 # 创建班级表 create table class( cid int primary key auto_increm ...

  6. 总结回顾js arr的常见方法以及相关的使用场景(一)

    Array对象方法 1.arr.concat() 连接两个或更多的数组,并返回结果. 连接数组中的值 连接两个数组 连接三个数组 2.arr.join() 把数组的所有元素放入一个字符串.元素通过指定 ...

  7. HDU多校1003-Divide the Stones(构造)

    Problem Description There are n stones numbered from 1 to n.The weight of the i-th stone is i kilogr ...

  8. HDU - 6570 - Wave(暴力)

    Avin is studying series. A series is called "wave" if the following conditions are satisfi ...

  9. Centos7.6系统下docker的安装

    一.环境说明 系统:CentOS7.6 软件:Docker19.03 二.Docker的安装 2.1.在线安装 (1) 设置仓库,安装所需的软件包. yum-utils 提供了 yum-config- ...

  10. MyEclipse web项目连接数据库

    1.Build path添加jdbc驱动包 2.编写驱动类 import java.sql.Connection; import java.sql.DriverManager; import java ...