Использование pdf.js для рендеринга изображения JBIG2 в браузере
Я пытаюсь сделать изображение JBIG2 в браузере. Этот скрипт, который является частью pdf.js, похоже, делает это: https://github.com/mozilla/pdf.js/blob/master/src/core/jbig2.js
Только у него нет инструкций по его использованию, поскольку он обычно выполняется как зависимость pdf.js (для полного рендеринга PDF, который мне не нужен или не нужен).
Может кто-нибудь выяснить, как я использовал бы этот скрипт для рендеринга изображения JBIG2 на веб-странице?
3 ответа
Поскольку никто не помог вам с этим, позвольте мне хотя бы поделиться своим прогрессом в этой проблеме:
<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
элемент (в идеале вы должны создать pixeldataarray, а затем использовать putImageData
).
Теперь позвольте мне наметить для вас способ "разобраться" с остальным решением. Вероятно, лучше всего подойдет pdf.js, добавление журналирования, создание pdf только с одним изображением jbig2, а затем наблюдение за тем, как именно указанный массив выводится на холст (и как / где определяются размеры).
JBIG2, используемый в спецификации PDF, является подмножеством полной спецификации JBIG2 (так называемый встроенный профиль). Например, в pdf у вас может быть поток jbig2, который может ссылаться только на один словарь общих символов. Полная спецификация не имеет этого ограничения, и она также определяет формат для объединения всех частей (все это отсутствует в pdfjs).
Таким образом, то, что вы ищете, технически возможно (с некоторыми усилиями), но это не просто.
Не могли бы вы обработать это на стороне сервера?
Есть хороший пост о стековерсии потока об использовании Java или инструментов