|
- export class CrsClient {
- /**
- * @param config { {cloudKey: string, token: string, clientHost: string, jpegQuality: number} }
- * @param canvas { HTMLCanvasElement }
- */
-
- base64_decode(input) { // 解码,配合decodeURIComponent使用
- var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
- var output = "";
- var chr1, chr2, chr3;
- var enc1, enc2, enc3, enc4;
- var i = 0;
- input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
- while (i < input.length) {
- enc1 = base64EncodeChars.indexOf(input.charAt(i++));
- enc2 = base64EncodeChars.indexOf(input.charAt(i++));
- enc3 = base64EncodeChars.indexOf(input.charAt(i++));
- enc4 = base64EncodeChars.indexOf(input.charAt(i++));
- chr1 = (enc1 << 2) | (enc2 >> 4);
- chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
- chr3 = ((enc3 & 3) << 6) | enc4;
- output = output + String.fromCharCode(chr1);
- if (enc3 != 64) {
- output = output + String.fromCharCode(chr2);
- }
- if (enc4 != 64) {
- output = output + String.fromCharCode(chr3);
- }
- }
- return this.utf8_decode(output);
- }
- utf8_decode(utftext) { // utf-8解码
- var string = '';
- let i = 0;
- let c = 0;
- let c1 = 0;
- let c2 = 0;
- while (i < utftext.length) {
- c = utftext.charCodeAt(i);
- if (c < 128) {
- string += String.fromCharCode(c);
- i++;
- } else if ((c > 191) && (c < 224)) {
- c1 = utftext.charCodeAt(i + 1);
- string += String.fromCharCode(((c & 31) << 6) | (c1 & 63));
- i += 2;
- } else {
- c1 = utftext.charCodeAt(i + 1);
- c2 = utftext.charCodeAt(i + 2);
- string += String.fromCharCode(((c & 15) << 12) | ((c1 & 63) << 6) | (c2 & 63));
- i += 3;
- }
- }
- return string;
- }
-
- constructor(config, canvas) {
- this.config = config;
- this.canvas = canvas;
- this.context = canvas.getContext('2d');
- }
-
- /**
- * 发起一次CRS请求
- * @param frame { {data: ArrayBuffer, height: number, width: number} } 相机帧
- * @return {Promise}
- */
- queryImage(frame) {
- /*
- * 从相机帧开始,发起一次CRS请求的步骤:
- * 1. 将相机帧画到canvas上
- * 2. 调用canvas.toDataURL得到JPEG图片的base64 (需要小程序基础库2.12.0及以上)
- * 3. 填充请求参数
- * 4. 发送CRS请求并返回
- */
- let ctxImageData = this.context.createImageData(frame.width, frame.height); //#1
- ctxImageData.data.set(new Uint8ClampedArray(frame.data)); //#1
- this.context.putImageData(ctxImageData, 0, 0); //#1
- let dataUrl = this.canvas.toDataURL("image/jpeg", this.config.quality); //#2
- let base64 = dataUrl.substr(23); //#2 去除dataURL头,留下文件内容
-
- const params = { //#3 添加cloudKey参数
- image: base64,
- notracking: "true",
- appId: '20239cb7aa12abd58af820458711fea0'
- };
-
- return new Promise((resolve, reject) => { //#4 发送CRS请求
- let token = wx.getStorageSync('token')
- console.log(token);
- wx.request({
- url: `http://6db69340022abbad5fa30787b96a3d4b.cn1.crs.easyar.com:8080/search/`,
- method: 'post',
- data: params,
- header: {
- 'Authorization': token,
- 'content-type': 'application/json'
- },
- success: res => {
- console.log(res, '成功');
- var base64 = res.data.result.target.meta
- console.log(res.data.result.target.meta, '123123');
- let web = this.base64_decode(base64)
- console.log(this.base64_decode(base64));
- let index = 2
- wx.navigateTo({
- url: '../out/index?web=' + web + '&index=' + index,
- })
- },
- fail: err => {
- console.log(err);
- },
- });
- });
- }
- }
|