我有一个项目需要在浏览器中显示djvu图纸。
我在Github上找到了这个旧的库,据我所知,它将djvu文件转换为bmp,然后将其放入canvas元素中。
正如我所说,该库已经过时(最后一次提交是5年前),因此我需要进行一些更改。主要问题是该库使用过时的BlobBuilder。
我采取的解决方法有:
- 通过Chrome DevTools解压缩该库
- 错误最初出现在第3774行:
var c = "undefined" != typeof MozBlobBuilder ? MozBlobBuilder : "undefined" != typeof WebKitBlobBuilder ? WebKitBlobBuilder : console.log("warning: cannot build blobs")
- 我注释掉了这一行
- 接下来,我还注释掉了
c=new c;
和一些随后的行。
所以,现在它看起来像这样(变量I是数组缓冲区,ololo1和ololo2是某种偏移量和限制)。
var c = new Blob(new Uint8Array(new Uint8Array(I,ololo1,ololo2)))
, b = b.createObjectURL(c)
, c = document.getElementById(kb)
, f = c.getContext("2d")
, h = new Image
, g = a[Ea >> 2]
, i = a[Fa >> 2]
, j = c.width
, k = Math.round(i * j / g);
h.onload = function()
{
var a = g / j;
4 < a && (a = 4);
1 > a && (a = 1);
f.globalAlpha = 1;
for (N = 0; N < a; N++)
f.drawImage(h, N, N, g - a + N, i - a + N, 0, 0, j, k),
f.globalAlpha *= 1 - 1 / a;
R(h.complete, "Image /bmp.bmp could not be decoded")
}
;
h.onerror = function(errorMsg, url, lineNumber, column, errorObj) {
console.log(errorMsg, url, lineNumber, column, errorObj);
console.log("Image /bmp.bmp could not be decoded!")
}
;
现在我遇到了错误:“Image /bmp.bmp 无法解码!”(在h.onerror处理程序中抛出)。
所以,我的问题是:我做错了什么?
c.append((new Uint8Array(new Uint8Array(I,ololo1,ololo2))).buffer)
。 我不明白作者为什么将他的Uint8Array嵌套在新的Uint8Array中... 你只需要使用new Blob([new Uint8Array(I,ololo1,ololo2)])
就可以了。 - Kaiido