基本流程是这样的:前端上传身份证照片前使用canvas进行压缩后通过ajax把base64传到后端,后端再调用ocr进行识别,返回身份证上的信息。但现在上传后OCR一直报错----无法识别照片(如果不压缩就可以识别),代码如下:
js:
let reader = new FileReader()
// 将图片转成base64格式,img是input标签获取的图片
reader.readAsDataURL(img)
reader.addEventListener('load', function () {
var base64 = reader.result
let image = new Image()
image.src = base64
img.onload = () => {
let canvas = document.createElement('canvas')
let width = image.width
let height = image.height
// 如果图片大于四百万像素,计算压缩比并将大小压至400万以下
let ratio
console.log('图片像素为:' + width * height / 1000000 + '百万')
if ((ratio = width * height / 4000000) > 1) {
ratio = Math.sqrt(ratio)
width /= ratio
height /= ratio
} else {
ratio = 1
}
canvas.width = width
canvas.height = height
// 进行最小压缩
let ndata = canvas.toDataURL('image/jpeg', 0.1)
console.log('压缩前:' + base64.length)
console.log('压缩后:' + ndata.length)
console.log('压缩率:' + ~~(100 * (base64.length - ndata.length) / base64.length) + '%')
var imgdata = ndata.split(',')[1]
imgdata = encodeURIComponent(imgdata)
//将imgdata上传到服务器......
}
})
Java代码:
data = Base64.decodeBase64(file_data);
//将data送去做ocr
好想看看你的后台代码,最近一直在找这方面的东西。