Как эффективно извлечь байты изображения из PDF - PullRequest
0 голосов
/ 07 февраля 2020

Есть ли способ извлечь байты изображения из PDImageXObject для разных типов изображений, не загружая их в BufferedImage? TIFF-файл размером 15 МБ при загрузке в BufferedImage занимает 200 МБ памяти, чего я хотел бы избежать.

Я нашел пример для файлов JPG, но я понятия не имею, что он делает, или можно ли это сделать эквивалент для других типов файлов: PNG, GIF, TIFF и др. c.

    // I don't really understand this, but it works for JPEGs
    private static final List<String> PDF_JPEG_STOP_FILTERS = Arrays.asList(
        COSName.DCT_DECODE.getName(),
        COSName.DCT_DECODE_ABBREVIATION.getName());

    public void extractImage(PDImageXObject pdImage, OutpuStream baos) {
        if ("jpg".equals(pdImage.getSuffix())) {
            try (InputStream is = pdImage.createInputStream(PDF_JPEG_STOP_FILTERS)) {
                IOUtils.copy(is, baos);
            }
        } else {
            BufferedImage image = pdImage.getImage();
            // image.raster.data is huge
            ImageIO.write(image, "jpg", baos);
        }
    }
...