碧桂园
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

116 рядки
4.3 KiB

  1. export class CrsClient {
  2. /**
  3. * @param config { {cloudKey: string, token: string, clientHost: string, jpegQuality: number} }
  4. * @param canvas { HTMLCanvasElement }
  5. */
  6. base64_decode(input) { // 解码,配合decodeURIComponent使用
  7. var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
  8. var output = "";
  9. var chr1, chr2, chr3;
  10. var enc1, enc2, enc3, enc4;
  11. var i = 0;
  12. input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
  13. while (i < input.length) {
  14. enc1 = base64EncodeChars.indexOf(input.charAt(i++));
  15. enc2 = base64EncodeChars.indexOf(input.charAt(i++));
  16. enc3 = base64EncodeChars.indexOf(input.charAt(i++));
  17. enc4 = base64EncodeChars.indexOf(input.charAt(i++));
  18. chr1 = (enc1 << 2) | (enc2 >> 4);
  19. chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
  20. chr3 = ((enc3 & 3) << 6) | enc4;
  21. output = output + String.fromCharCode(chr1);
  22. if (enc3 != 64) {
  23. output = output + String.fromCharCode(chr2);
  24. }
  25. if (enc4 != 64) {
  26. output = output + String.fromCharCode(chr3);
  27. }
  28. }
  29. return this.utf8_decode(output);
  30. }
  31. utf8_decode(utftext) { // utf-8解码
  32. var string = '';
  33. let i = 0;
  34. let c = 0;
  35. let c1 = 0;
  36. let c2 = 0;
  37. while (i < utftext.length) {
  38. c = utftext.charCodeAt(i);
  39. if (c < 128) {
  40. string += String.fromCharCode(c);
  41. i++;
  42. } else if ((c > 191) && (c < 224)) {
  43. c1 = utftext.charCodeAt(i + 1);
  44. string += String.fromCharCode(((c & 31) << 6) | (c1 & 63));
  45. i += 2;
  46. } else {
  47. c1 = utftext.charCodeAt(i + 1);
  48. c2 = utftext.charCodeAt(i + 2);
  49. string += String.fromCharCode(((c & 15) << 12) | ((c1 & 63) << 6) | (c2 & 63));
  50. i += 3;
  51. }
  52. }
  53. return string;
  54. }
  55. constructor(config, canvas) {
  56. this.config = config;
  57. this.canvas = canvas;
  58. this.context = canvas.getContext('2d');
  59. }
  60. /**
  61. * 发起一次CRS请求
  62. * @param frame { {data: ArrayBuffer, height: number, width: number} } 相机帧
  63. * @return {Promise}
  64. */
  65. queryImage(frame) {
  66. /*
  67. * 从相机帧开始,发起一次CRS请求的步骤:
  68. * 1. 将相机帧画到canvas上
  69. * 2. 调用canvas.toDataURL得到JPEG图片的base64 (需要小程序基础库2.12.0及以上)
  70. * 3. 填充请求参数
  71. * 4. 发送CRS请求并返回
  72. */
  73. let ctxImageData = this.context.createImageData(frame.width, frame.height); //#1
  74. ctxImageData.data.set(new Uint8ClampedArray(frame.data)); //#1
  75. this.context.putImageData(ctxImageData, 0, 0); //#1
  76. let dataUrl = this.canvas.toDataURL("image/jpeg", this.config.quality); //#2
  77. let base64 = dataUrl.substr(23); //#2 去除dataURL头,留下文件内容
  78. const params = { //#3 添加cloudKey参数
  79. image: base64,
  80. notracking: "true",
  81. appId: '20239cb7aa12abd58af820458711fea0'
  82. };
  83. return new Promise((resolve, reject) => { //#4 发送CRS请求
  84. let token = wx.getStorageSync('token')
  85. console.log(token);
  86. wx.request({
  87. url: `http://6db69340022abbad5fa30787b96a3d4b.cn1.crs.easyar.com:8080/search/`,
  88. method: 'post',
  89. data: params,
  90. header: {
  91. 'Authorization': token,
  92. 'content-type': 'application/json'
  93. },
  94. success: res => {
  95. console.log(res, '成功');
  96. var base64 = res.data.result.target.meta
  97. console.log(res.data.result.target.meta, '123123');
  98. let web = this.base64_decode(base64)
  99. console.log(this.base64_decode(base64));
  100. let index = 2
  101. wx.navigateTo({
  102. url: '../out/index?web=' + web + '&index=' + index,
  103. })
  104. },
  105. fail: err => {
  106. console.log(err);
  107. },
  108. });
  109. });
  110. }
  111. }