将电容器相机结果转换为 Blob
Convert capacitor Camera result to Blob
我需要将 Capacitor Camera 插件的结果转换为 Blob,以便上传到 Firebase 存储。
我可以上传 Base64 字符串,但我已经从浏览按钮的文件列表上传 Blobs/Files,所以我不想更改它的设计。
Camera 插件以表示 PNG 图像的 Base64 编码字符串形式提供图像数据。
我试过以下方法:
const { Camera } = Plugins;
const image = await Camera.getPhoto({
quality: 90,
allowEditing: true,
resultType: CameraResultType.Base64
});
const rawData = atob(image.base64String);
const blob = new Blob([rawData], { type: 'image/png' });
但 blob 最终不是有效图像。
感谢任何帮助。
使用:@angular/core:9.1.4,@ionic/angular:5.1.0,@capacitor/core:2.1.1
你需要把atob
提供的字节字符转换成字节数组,然后可以用来生成一个Blob
:
const rawData = atob(image.base64String);
const bytes = new Array(rawData.length);
for (var x = 0; x < rawData.length; x++) {
bytes[x] = rawData.charCodeAt(x);
}
const arr = new Uint8Array(bytes);
const blob = new Blob([arr], {type: 'image/png'});
我用这个:
import {decode} from "base64-arraybuffer";
const cameraPhoto = await Camera.getPhoto({
resultType: CameraResultType.Base64,
}
const blob = new Blob([new Uint8Array(decode(cameraPhoto.base64String))], {
type: `image/${cameraPhoto.format}`,
});
如果需要转成文件:
const file = new File([blob], "Name", {
lastModified: moment().unix(),
type: blob.type,
});
我需要将 Capacitor Camera 插件的结果转换为 Blob,以便上传到 Firebase 存储。
我可以上传 Base64 字符串,但我已经从浏览按钮的文件列表上传 Blobs/Files,所以我不想更改它的设计。
Camera 插件以表示 PNG 图像的 Base64 编码字符串形式提供图像数据。
我试过以下方法:
const { Camera } = Plugins;
const image = await Camera.getPhoto({
quality: 90,
allowEditing: true,
resultType: CameraResultType.Base64
});
const rawData = atob(image.base64String);
const blob = new Blob([rawData], { type: 'image/png' });
但 blob 最终不是有效图像。
感谢任何帮助。
使用:@angular/core:9.1.4,@ionic/angular:5.1.0,@capacitor/core:2.1.1
你需要把atob
提供的字节字符转换成字节数组,然后可以用来生成一个Blob
:
const rawData = atob(image.base64String);
const bytes = new Array(rawData.length);
for (var x = 0; x < rawData.length; x++) {
bytes[x] = rawData.charCodeAt(x);
}
const arr = new Uint8Array(bytes);
const blob = new Blob([arr], {type: 'image/png'});
我用这个:
import {decode} from "base64-arraybuffer";
const cameraPhoto = await Camera.getPhoto({
resultType: CameraResultType.Base64,
}
const blob = new Blob([new Uint8Array(decode(cameraPhoto.base64String))], {
type: `image/${cameraPhoto.format}`,
});
如果需要转成文件:
const file = new File([blob], "Name", {
lastModified: moment().unix(),
type: blob.type,
});