首页 - 崮生写笔记的地方

腾讯ocr接口调用

生成签名的方式

一开始我用的encodeURI而非encodeURIComponent导致签名一直异常,坑了我半天时间

encodeUrl 看文档可知encodeURI 保留了一些字符,这些字符即便具有适当的UTF-8转义序列也不会被转义

类型 包含
保留字符 ; , / ? : @ & = + $
非转义的字符 字母 数字 - _ . ! ~ * ' ( )
数字符号 #
function getReqSign(params: any, appkey: string) {
    // 1. 字典升序排序
    params = ksort(params);
    // 2. 拼按URL键值对
    let str = '';
    for (const key in params) {
        if (params.hasOwnProperty(key)) {
            const element = params[key]
            if (element === '')
                continue
            str += key + '=' + encodeURIComponent(element) + '&'
        }
    }
    str += 'app_key=' + appkey
    // 4. MD5运算+转换大写,得到请求签名
    params.sign = md5(str).toUpperCase()
    return params
}
function ksort(obj: any) {
    var keys = Object.keys(obj).sort()
        , sortedObj: any = {};
    for (var i in keys) {
        sortedObj[keys[i]] = obj[keys[i]];
    }
    return sortedObj;
}

img转base64

主要利用canvas的toDataURL,toDataURL的第二个参数可以调整图片的质量,能够起到压缩图片的功能。

export function getBase64Image(img: HTMLImageElement) {
    canvas.width = img.width;
    canvas.height = img.height;
    var ctx = canvas.getContext("2d");
    ctx.drawImage(img, 0, 0, img.width, img.height);
    var dataURL = canvas.toDataURL("image/jpeg",0.5);
    //toDataURL的第二个参数可以调整压缩率
    // return dataURL
    return dataURL.replace("data:image/jpeg;base64,", "");
}
代码库-git