Извлечение изображения без потерь из PDF - PullRequest
0 голосов
/ 04 июля 2019

Я использую PDFBox для извлечения изображений из файла PDF и подачи его в другую библиотеку обработки изображений (которая может обрабатывать различные форматы изображений). Мой текущий код выглядит так:

PDImageXObject pdImage;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
BufferedImage image = pdImage.getImage();
ImageIO.write(image, "png", baos);
byte[] imageBytes = baos.toByteArray();

Это займет все, что хранится в файле PDF, и использует графику Java для преобразования в формат PNG. Есть ли лучший способ избежать преобразования и извлечь изображение в том формате, в котором оно встроено? Я не хочу ухудшать качество изображения (я полагаю, что его можно уменьшить, используя формат без потерь, такой как PNG?), И понести накладные расходы на преобразование.

1 Ответ

0 голосов
/ 04 июля 2019

Алгоритм DEFLATE используется фильтром FlateDecode и форматом файла PNG.Однако поток данных, сжатых с помощью FlateDecode, не сам файл PNG.

Кроме того, необходимо учитывать представление цветового пространства объекта XObject (например, DeviceCMYK) в сравнении с тем, что фактически поддерживает PNG..

Выбрав сжатие без потерь для выходного файла изображения, вы не потеряете никакой информации.(Убедитесь, что вам действительно нужно извлеченное изображение без потерь, часто люди предполагают, что сжатие с потерями означает, что их изображение теперь будет иметь так много изменений, что его уже нельзя будет распознать. Хотя во многих случаях, в зависимости от параметров, потеря едва заметна невооруженным глазом, и вы можетесущественно выиграть от экономии размера сжатия Lossy.)

Если производительность низкая, это может быть просто качество вашего программного обеспечения PDF, ответственного за извлечение изображения и его сохранение.

...