虎绿林支持HEIC/HEIF/AVIF图片了,但是第一次加载较慢
@Curtion,@saschazar/wasm-heif在浏览器里不正常,用官方示例代码解码根本没反应,也没有任何错误。
https://hu60.cn/js/node_modules/@saschazar/wasm-heif/index.html
@Curtion,找到了另一个有希望的解码包。并不是,只是图片类型检测。
https://github.com/sapphi-red/node-midec
Multi-image detector (Wasm). cf. Animated GIF, APNG, Animated WebP, Animated HEIF/AVIF.
Pure Webassembly + JavaScript port of midec.
Pure go multi-image detector. cf. Animated GIF, APNG, Animated WebP, Animated HEIF / AVIF.
看起来是从golang编译的,内存安全性应该更好。
甚至有人用wasm播放h.265视频
https://zhuanlan.zhihu.com/p/73772711
@Curtion,我终于知道了,原来npm上的例子是错的,不能在初始化函数里调用decode,会死锁。必须在外面调用才行。
https://github.com/saschazar21/webassembly/pull/547
好像各大浏览器都不打算支持 HEIC 格式了
@Curtion,大无语事件,好不容易做好了wasm版,结果它却把3楼的图片解码成这样。横向都没问题,纵向似乎就不行了……
只能回滚到纯js版本……
问题展示:https://heic-test.hu60.cn/
@老虎会游泳,我通过canvas直接对原始RGB绘制,可以正常的显示出二楼的图片,同时测试了iPhone上的heic依然可以正常显示。
我的代码如下
const alpha = true;
let result = heifModule.decode(buffer, buffer.length, alpha);
heifModule.free();
let ctx = document.getElementById("canvas").getContext("2d");
console.log(result.length, 2708 * 6016 * 4);
let imgData = new ImageData(Uint8ClampedArray.from(result), 2708, 6016);
ctx.putImageData(imgData, 0, 0);
其中2708、6016为图片的宽和高
如果把alpha设置为false的话那么图片高x宽x3却不等于result.length。
如果把alpha设置为true的话,透明信息都被设置成了255,但高x宽x4正好和result.length相同。
虽然我对图像编码不了解,但是我认为alpha设置为false时应该是不正常的,它的大小居然会比去除透明通道后的图片还要大,多出来的一些数据可能影响了jpeg编码库。
红米K30 Pro(变焦版)
@Curtion,我添加了缓存,现在的体验已经变得可用了。