前端部分(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. Ubuntu图形桌面切换到命令行界面

    Ubuntu提供两种进入方式,一个是我们平常最熟悉的图形界面形式,还有一种是纯命令行方式. 1.按 Ctrl + Alt + (F1~F6中的任意一个)即可进入纯命令行模式. 进入后,需要输入用户名, ...

  2. 第2章 RDD编程(2.3)

    第2章 RDD编程(2.3) 2.3 TransFormation 基本RDD Pair类型RDD (伪集合操作  交.并.补.笛卡尔积都支持) 2.3.1 map(func) 返回一个新的RDD,该 ...

  3. ID3\C4.5\CART

    目录 树模型原理 ID3 C4.5 CART 分类树 回归树 树创建 ID3.C4.5 多叉树 CART分类树(二叉) CART回归树 ID3 C4.5 CART 特征选择 信息增益 信息增益比 基尼 ...

  4. Pytest的装饰器——parametrize中ids里包含中文,用例标题显示异常如何解决?

    在使用pytest做测试的过程中,经常会用到pytest.mark.parametrize来对批量生成测试用例,比如 @pytest.mark.parametrize( ['a', 'b', 'exp ...

  5. Color a Tree & 排列

    Color a Tree 题目链接 好不可做?可以尝试一下DP贪心网络流.DP 似乎没法做,网络流也不太行,所以试一下贪心. 考虑全局中最大权值的那个点,如果它没父亲,那么一定会先选它:否则,选完它父 ...

  6. 使用powershell完成定时get任务

    最近公司网站需要在后台定时请求和更新数据,但PHP毕竟是一种后端语言,不能自动运行,所以整理了几个方法. 1.在前端定时请求页面. 2.使用批处理. 3.使用windows计划任务. 第一种方案必须要 ...

  7. Transform与Vector3 的API

    Transform.InverseTransformDirection(Vector3 direction) Vector3.ProjectOnPlane(Vector3 vector, Vector ...

  8. Photogrammetry and Game

    https://skulltheatre.wordpress.com/2013/02/11/photogrammetry-in-video-games-frequently-asked-questio ...

  9. SpringBoot程序启动时在Oracle数据库中建表充值

    例子工程下载链接:https://files.cnblogs.com/files/xiandedanteng/gatling20200428-1.zip 需求:在工程启动时在Oracle数据库中建表. ...

  10. Fabric1.4 架构和原理

    #1.Fabric总体架构Fabric架构主要包括三个模块:会员(Membership),区块链(Blockchan)和链码(chaincode). 1.1成员服务 包含下列组件:注册.身份认证管理及 ...