Vue+Java+Base64实现条码解析的示例
作者:Mr_Bingzi 发布时间:2024-05-02 17:08:27
标签:Vue,Java,Base64,条码,解析
前端部分(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;
}
来源:https://www.cnblogs.com/bingziweb/p/13713505.html


猜你喜欢
- 机器A: select instance_name from v$instance; select name from v$database
- 网上找了半天 不是dataframe转化成array的就是array转化dataframe,所以这里给汇总一下,相互转换的python代如下
- 在pytorch中一般只对叶节点进行梯度计算,也就是下图中的d,e节点,而对非叶节点,也即是c,b节点则没有显式地去保留其中间计算过程中的梯
- python第三方库的安装PyInstaller库PyInstaller库能够在不同操作系统下将python源文件打包,变成直接可运行的可执
- configparser中默认值的设定在做某一个项目时,在读配置文件中,当出现配置文件中没有对应项目时,如果要设置默认值,以前的做法是如下的
- Python函数用法和底层分析函数是可重用的程序代码块。函数的作用,不仅可以实现代码的复用,更能实现代码的一致性。一致性指的是,只要修改函数
- 本文实例讲述了Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能。分享给大家供大家参考,具体如下:因为需要使用
- 简介:轮廓发现是基于图像边缘提取的基础寻找对象轮廓的方法,所以边缘提取的阈值选定会影响最终轮廓发现结果。代码如下:import cv2 as
- 首先我们需要导入random模块 1. random.random(): 返回随机生成的一个浮点数,范围在[0,1)之间impor
- 什么是TensorboardXTensorboard 是 TensorFlow 的一个附加工具,可以记录训练过程的数字、图像等内容,以方便研
- 如何用ASP发送带附件的邮件?请问如何用CDONTS组件发送带附件的邮件? 见下列代码:<%&nb
- 互联网充斥着枯燥的设计,惠普、IBM、戴尔、微软,以及其他数不尽的网站(相似的布局,相似的配色)。可能有人会说通过这样一种标准化的界面可以使
- 有序字典-OrderedDict简介示例有序字典和通常字典类似,只是它可以记录元素插入其中的顺序,而一般字典是会以任意的顺序迭代的。参见下面
- 如果用delayed-insert插入时不用锁表。./bin/mysqldump -uroot -proot &nbs
- 提到序列化与反序列化,通常会想到 json ,xml .在J2EE的开发中,这是很常用的技术,比如一个java class与xml之间的序列
- 介绍还记得你在小学时学习如何加减数字吗?现在,你也可以对图像做同样的事情!输入图像可以进行算术运算,例如加法、减法和按位运算(AND、OR、
- 学习前言我发现不仅有很多的Keras模型,还有很多的PyTorch模型,还是学学Pytorch吧,我也想了解以下tensor到底是个啥。Py
- JDBC之C3P0数据库连接池,供大家参考,具体内容如下1 首先在src中创建c3p0-config.xml 配置文件,文件中内容如下(首先
- 你可以按照以下方法使用 ls 命令来查看你的系统中都有那些 Python 的二进制文件可供使用。$ ls /usr/bin/python*/
- 前言:之前的文章我们已经开启了爬虫程序的exe之旅,但是我们最终实现的程序存在一个非常大的问题,当进行网络请求的时候,程序卡死,直到数据请求