【发布时间】:2020-10-05 03:12:40
【问题描述】:
我想使用 javascript 访问和操作图像的二进制数据。据我研究,可以使用 Canvas API 来完成 - 在内存中创建画布和上下文,然后使用它们的内置方法。我想出的看起来像这样:
function fileToBase64(file: File): Promise<string> {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => resolve(<string>reader.result);
reader.onerror = () => reject(reader.error);
reader.readAsDataURL(file);
});
}
function base64ToImageData(base64: string): Promise<ImageData> {
return new Promise((resolve, reject) => {
const img = new Image();
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
img.onload = () => {
canvas.width = img.width;
canvas.height = img.height;
ctx.drawImage(img, 0, 0);
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
resolve(imageData);
}
img.onerror = () => reject();
img.src = base64;
});
}
我不喜欢这种方法的一点是它冗长并且可能使用了更多的资源。
所以问题是:有没有办法在不使用 canvas API 的情况下获得图像的二进制表示?
【问题讨论】:
-
Is there a way to get a binary representation?认为您的意思是 ImageData 表示您以后可以操作的所有 rgba 像素数据?图像的二进制表示有很多,png、jpg、webp等
标签: javascript typescript image binary html5-canvas