解码 PNG 图片就是把一张图片从二进制数据转成包含像素数据的 ImageData
。
图片的二进制数据可以从 <canvas>
,<img>
,Object URLs,Image URLs,Blob
对象上获取到。参见浏览器图像转换手册。
ImageData
是一个包括了像素数据、图片宽高数据的对象。
👆 这是一张我们接下去要解码的图片,但它太小了,放大了展示给大家看下。👇
我们先从浏览器的 <input>
标签上读取到 Blob
对象,然后拿到这张图片的二进制数据。
<input type="file" />
<script>
const input = document.querySelector('input');
input.addEventListener('change', async function(e) {
const [file] = e.target.files;
const arrayBuffer = await file.arrayBuffer();
console.log('arrayBuffer', arrayBuffer);
// TODO: Let's decode arrayBuffer
const imageData = decode(arrayBuffer);
console.log('imageData', imageData);
});
</script>
得到的 arrayBuffer
如下:
由于 V2EX 对 Markdown Table 语法支持不好,请移步博客查看。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.