【问题标题】:Image Base64 string to Uint8ClampedArray图像 Base64 字符串到 Uint8ClampedArray
【发布时间】:2019-01-27 15:06:55
【问题描述】:

我有从Expo ImagePicker component 返回的 base64 格式的图像数据,我想将其转换为 [r0, g0, b0, a0, r1, g1, b1, a1, .. .],因为这是jsQR library接受的唯一输入

我试过了,但没有用:

const dataURItoBlob = byteString  => {

  // write the bytes of the string to a typed array
  var ia = new Uint8ClampedArray(byteString.length);
  for (var i = 0; i < byteString.length; i++) {
    ia[i] = byteString.charCodeAt(i);
  }

  return ia;
};

我们将不胜感激任何帮助

【问题讨论】:

    标签: javascript image react-native qr-code


    【解决方案1】:

    我找到的解决方法如下:

    需要使用typedarrayBufferjpeg-js

    var Uint8ClampedArray = require('typedarray').Uint8ClampedArray;
    const Buffer = require('buffer').Buffer;
    global.Buffer = Buffer; // very important
    const jpeg = require('jpeg-js');
    
    
    const jpegData = Buffer.from(base64, 'base64');
    var rawImageData = jpeg.decode(jpegData);
    
    var clampedArray = new Uint8ClampedArray(rawImageData.data.length);
    // manually fill Uint8ClampedArray, cause Uint8ClampedArray.from function is not available in react-native
    var i;
    for (i = 0; i < rawImageData.data.length; i++) {
      clampedArray[i] = rawImageData.data[i];
    }
    

    【讨论】:

      【解决方案2】:

      我猜你的 base64 编码的 URI 实际上是一个 PNG,所以你可以执行以下操作:

      const {PNG} = require('pngjs');
      const jsqr = require('jsqr');
      
      const dataUri = 'data:image/png;base64,ABCDEFYOURIMAGEHEREABCDEF';
      const png = PNG.sync.read(Buffer.from(dataUri.slice('data:image/png;base64,'.length), 'base64'));
      const code = jsqr(Uint8ClampedArray.from(png.data), png.width, png.height);
      
      // code.data now contains the URL string encoded by the QR code
      

      【讨论】:

      • 非常感谢!
      【解决方案3】:

      React Native 的新答案:

      这个包应该可以解决问题。让我知道它是否有效。

      https://www.npmjs.com/package/get-image-data

      浏览器的旧版本:

      首先将 base64 img 放入画布中,如下所述:

      Base64 PNG data to HTML5 canvas

      然后将ImageData 应用到您的canvas (https://developer.mozilla.org/en-US/docs/Web/API/ImageData)

      这应该会给你想要的结果。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-11
      相关资源
      最近更新 更多