我正在尝试在浏览器中呈现JBIG2图像。这个脚本是pdf.js的一部分,似乎是这样做的: https://github.com/mozilla/pdf.js/blob/master/src/core/jbig2.js
只有它没有关于其用法的说明,因为它通常作为pdf.js的依赖项执行(对于完整的PDF渲染,我不想要或不需要。)
有人能弄明白我如何使用这个脚本在网页上呈现JBIG2图像吗?
答案 0 :(得分:1)
由于没有人帮助过你,让我至少分享一下我在这个问题上的进展:
<script src="arithmetic_decoder.js"></script>
<script src="util.js"></script>
<script src="jbig2.js"></script>
<script>
var jbig2 = new Jbig2Image();
httpRequest = new XMLHttpRequest();
httpRequest.responseType = 'arraybuffer';
httpRequest.onreadystatechange = function() {
if (httpRequest.readyState === 4) {
if (httpRequest.status === 200) {
var data = jbig2.parseChunks([{
data:new Uint8Array(httpRequest.response),
start:0,
end:httpRequest.response.byteLength
}]);
for (var i = 0; i < data.length; i++)
data[i] ^= 0xFF;
console.log(data);
} else {
alert('There was a problem with the request.');
}
}
};
httpRequest.open('GET', "sample.jbig2");
httpRequest.send();
</script>
所以,这会使所有相关的依赖关系变得清晰,它包含我认为应该调用parseChunks
函数的方式(我确信Uint8Array部分与XMLHttpRequest中的arraybuffer结合使用,不确定是否我不应该首先切片或类似的东西)。返回数据的数组看起来像某种像素数组,但缺少有关宽度或高度的任何信息我不知道如何继续。此外,您提供的示例.jbig2
文件在STDU查看器(我可以找到查看.jbig2
文件的唯一免费应用程序)中出现损坏错误,因此我无法检查图像是否大部分为白色(如结果数据似乎暗示)也不是手工绘制结果似乎是一个好主意,因为我没有任何宽度或高度。如果你想绘制它的方式当然是一个canvas
元素(理想情况下你应该构造一个pixeldataarray然后使用putImageData
)。
现在,让我概述一种方法,让您“找出”解决方案的其余部分。什么最好的工作可能是分支pdf.js,添加日志记录,生成一个只有一个jbig2图像的pdf,然后观察上面的数组如何被绘制到画布(以及如何/在何处确定尺寸)。
答案 1 :(得分:0)
PDF规范中使用的JBIG2是完整JBIG2规范的子集(所谓的嵌入式配置文件)。例如,在pdf中,您可以拥有一个只能引用单个共享符号字典的jbig2流。完整的规范没有这个限制,它还定义了一个格式,将所有部分组合在一起(pdfjs中缺少所有部分)。
总而言之,您所寻求的是技术上可行的(需要付出一些努力),但这并不简单。
答案 2 :(得分:0)