誰もこれについてあなたを助けていないので、少なくともこの問題に関する私の進歩を共有させてください:
<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
関数を呼び出す必要があると私が信じている方法が含まれています (XMLHttpRequest の arraybuffer と組み合わせた Uint8Array 部分については確信があります。そのようなもの)。データに返される配列は、ある種のピクセル配列のように見えますが、幅や高さに関する情報が不足しているため、続行する方法がわかりません。さらに、あなたが提供したサンプル.jbig2
ファイルは、STDU ビューアー (ファイルを表示するために見つけた唯一の無料アプリ.jbig2
) で破損エラーを示しているため、画像がほとんど白であるかどうかを確認できませんでした (結果のデータが示唆しているように)。幅も高さもなかったので、手で結果を出すのは良い考えのように思えました。あなたがそれを描きたいなら、行く方法はもちろんですcanvas
要素 (理想的には、pixeldataarray を構築してから使用する必要がありますputImageData
)。
ここで、残りのソリューションを「把握」する方法の概要を説明します。おそらく最もうまくいくのは、pdf.js をフォークし、ログを追加し、単一の jbig2 画像で pdf を生成し、上記の配列がキャンバスにどのように正確に描画されるか (および寸法がどのように/どこで決定されるか) を観察することです。