I have imagedata in base64 format returned from Expo ImagePicker component, and I want to convert it to An Uint8ClampedArray of RGBA pixel values in the form [r0, g0, b0, a0, r1, g1, b1, a1, ...], cause it's the only input accepted by jsQR library
I tried this, but did not work:
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;
};
any help will be highly appreciated
The solution that I found is as follows:
it requires the usage of typedarray, Buffer, jpeg-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];
}