我正在尝试在浏览器中呈现 JBIG2 图像。这个脚本,它是 pdf.js 的一部分似乎这样做: https ://github.com/mozilla/pdf.js/blob/master/src/core/jbig2.js
只有它没有关于其使用的说明,因为它通常作为 pdf.js 的依赖项执行(用于完整的 PDF 渲染,我不想要或不需要。)
谁能弄清楚我将如何使用此脚本在网页上呈现 JBIG2 图像?
我正在尝试在浏览器中呈现 JBIG2 图像。这个脚本,它是 pdf.js 的一部分似乎这样做: https ://github.com/mozilla/pdf.js/blob/master/src/core/jbig2.js
只有它没有关于其使用的说明,因为它通常作为 pdf.js 的依赖项执行(用于完整的 PDF 渲染,我不想要或不需要。)
谁能弄清楚我将如何使用此脚本在网页上呈现 JBIG2 图像?
由于没有人帮助你解决这个问题,让我至少分享一下我在这个问题上的进展:
<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 中的数组缓冲区相结合,不确定我是否应该先将其切片或任何类似的东西)。返回数据的数组看起来像某种像素数组,但缺少有关宽度或高度的任何信息,我不知道如何继续。.jbig2
此外,您提供的示例文件在 STDU 查看器(我能找到的唯一一个查看.jbig2
文件的免费应用程序)中出现损坏错误,因此我无法检查图像是否大部分为白色(正如结果数据似乎暗示的那样),也无法绘制手工结果似乎是个好主意,因为我没有任何宽度或高度。如果你想画它,当然要走的路是canvas
元素(理想情况下,您应该构造一个像素数据数组,然后使用putImageData
)。
现在,让我概述一种方法,让您“找出”解决方案的其余部分。最有效的方法可能是分叉 pdf.js、添加日志记录、仅使用单个 jbig2 图像生成 pdf,然后观察上述数组是如何准确地绘制到画布上的(以及确定尺寸的方式/位置)。
PDF 规范中使用的 JBIG2 是完整 JBIG2 规范(所谓的嵌入式配置文件)的子集。例如,在 pdf 中,您可以拥有一个只能引用单个共享符号字典的 jbig2 流。完整的规范没有这个限制,它还定义了一种将所有部分组合在一起的格式(所有这些在 pdfjs 中都没有)。
总之,您正在寻找的东西在技术上是可行的(需要付出一些努力),但这并不简单。