前端部分(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. Linux系统环境下MySQL数据库源代码的安装

    Linux系统环境下MySQL数据库源代码的安装 基本环境:CentOS Linux release 7.8.2003 (Core).MySQL5.6 一.      安装环境准备 若要在Linux系 ...

  2. 操作系统-I/O(6)I/O与系统调用

    所有高级语言的运行时(runtime)都提供了执行I/O功能的机制. 例如,C语言中提供了包含像printf()和scanf()等这样的标准I/O库函数, C++语言中提供了如 <<和&g ...

  3. Flink-1.10.0中的readTextFile解读

    Flink-1.10.0中的readTextFile解读 最近在学习Flink,研究了一些东西,在准备自定义一个简单的监听文件的source作为练手的时候,遇到了一个问题.就是应该如何在自己的sour ...

  4. Fiddler或Charles文件转换为Jmeter可执行脚本

    解决脚本录制问题,可以将Fiddler或Charles转换成对应的Jmeter脚本,实现部分内容的参数化配置,通过修改部分参数或参数化可以对http协议的接口进行自动化测试或简单的压力测试 GitHu ...

  5. Java中的判断实例

    .getClass().getName() 这是最常见的一种判断类型的方法 instanceof 用于判断 对象 是否为某个类的实例 Boolean值 各种is方法 isAnnotationPrese ...

  6. 移动web开发之布局

    移动web开发流式布局 1.0 移动端基础 1.1浏览器现状 PC端常见浏览器:360浏览器.谷歌浏览器.火狐浏览器.QQ浏览器.百度浏览器.搜狗浏览器.IE浏览器. 移动端常见浏览器:UC浏览器,Q ...

  7. element UI dialog 固定高度 且关闭时清空数据

    解决方法:在dialog里写一个div ,div的大小设置为相对视窗的大小就行 <el-dialog title="xxx" :visible.sync="dial ...

  8. LeetCode 95 | 构造出所有二叉搜索树

    今天是LeetCode专题第61篇文章,我们一起来看的是LeetCode95题,Unique Binary Search Trees II(不同的二叉搜索树II). 这道题的官方难度是Medium,点 ...

  9. Labview学习之路(八)如何让控件显示在修饰符的前面

    在Labview2017版本中,前面板选择修饰控件,会出现部分修饰控件会掩盖其他控件,情况如下: 我们右键点击和属性中都没有相关属性的改变,为什么是这样我也不清除: 上网查了一下,看到其他版本会有显示 ...

  10. Shader之溶解效果的几种实现方法

    这里通过 “是否丢弃像素”的2种方法,写2个shader,效果是一样的,也提到了,丢弃某个像素的3种方式. 是否丢弃: 1.通过脚本控制shader变量判断当前是否丢弃像素,需要额外脚本: 2.sha ...