前端部分(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. Android开发之模拟器genymotion安装apk出现错误: Install_failed_invalid_URI

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985,转载请说明出处. install failed invalid uri Android开发之模拟器ge ...

  2. laya资源版本管理

    layaair-cmd https://ldc.layabox.com/doc/?nav=zh-as-3-4-2 Laya的版本管理 https://blog.csdn.net/qq_43287088 ...

  3. web自动化多次打开浏览器嫌烦?打开一次浏览器,pytest有个招

    最近系统前端组件做了更新,我就把之前做的web自动化的代码做了一些修改,顺便优化了下用例,只保留少量的测试用例了,大头还是在接口自动化上.然后发现关于pytest的还有一个点应该比较常用,这里再介绍一 ...

  4. HDU - 1019-Least Common Multiple(求最小公倍数(gcd))

    The least common multiple (LCM) of a set of positive integers is the smallest positive integer which ...

  5. Codeforces 1321E World of Darkraft: Battle for Azathoth

    题意 有\(n\)个武器,第\(i\)个武器攻击力为\(a_i\),价值\(ca_i\). 有\(m\)个防具,第\(i\)个防具防御力为\(b_i\),价值\(cb_i\). 有\(p\)个怪,第\ ...

  6. webapi上传图片的两种方式

    /// <summary>        /// App上传图片        /// </summary>        /// <returns>返回上传图片的 ...

  7. 重学Ajax

    什么是Ajax Asynchronous JavaScript and xml 异步的JavaScript和XML 只是一种js的应用,在无需重新加载整个网页的情况下实现部分网页的数据更新的技术.减少 ...

  8. IDEA左侧文件目录不见了,帮你找回来!

    前几天不知道什么操作,把IDEA左侧项目的目录给弄没了,如下图,在百度上搜索了不少,就是没有效果,很是头疼,巧的是,今天琢磨了一下,又给弄回来了,所以在此记录一下,以后再给弄没了,就知道了,同时也算是 ...

  9. 抽象工厂模式详解 —— head first 设计模式

    项目实例 假设你有一家 pizza 店,你有很多种 pizza,要在系统中显示你所有 pizza 种类.实现这个功能并不难,使用普通方式实现: public class PizzaStore { Pi ...

  10. mysql版本和模式查询

    查找数据库的: select version() select @@sql_mode 上面是查版本号,下面是查sql-mode,改sql-model要在mysql目录下配置文件 my.ini, 改修改 ...