Вы неправильно понимаете формат данных, возвращаемых imageData.getData()
. Вы говорите,
ожидаемый байтовый массив png должен начинаться с {-119, 80, 78, 71};
, но imageData
больше не содержит PNG, он содержит данные в формате необработанного растрового изображения PDF.
Кроме того, вы очень поверхностно проверяли данные, возвращаемые imageData.getData()
, вы заявляете
, когда я печатаю imageData.getData (), я получаю байтовый массив содержит только -1
, что неверно: он действительно содержит очень много записей -1, но также некоторые другие байтовые значения:
- 255898 раз
-1
- 12838 раз
-2
- 3126 раз
-3
et c et c
И это на самом деле не очень удивительно, после все ваше изображение почти чисто белое с небольшим количеством каракулей:
преобладающий белый (RGB: 255, 255, 255) и почти белый (значения RGB немного меньше 255) является причиной множества -1
(или байтов без знака: 255
), '-2' / '254', -3
/ 253
, ... value В то время как набросок вводит несколько (беззнаковых) меньших байтов.
Я что-то упускаю для инициализации Image или это ошибка?
Прежде всего это это не ошибка iText, а именно то, что и следовало ожидать.
Вопрос в том, что вы хотите делать с теми данными изображений, которые просто предназначены для встраивания в PDF после сжатия. Поэтому обычно пользователи iText сами не вызывают getData()
здесь, а вместо этого создают объект изображения iText из данных изображения и добавляют его в PDF:
ImageData data = ImageDataFactory.create(...);
Image img = new Image(data);
, а затем
Document document = ...;
document.add(img);
или
Canvas canvas = ...;
canvas.add(img);
или даже
PdfCanvas pdfCanvas = ...;
pdfCanvas.addImage(data, ...);
, и iText обрабатывает фактические данные изображения под колпаком.