Преобразование многостраничного TIFF в строку Base64 в Java - PullRequest
1 голос
/ 14 марта 2019

Код ниже должен конвертировать изображение в его строку Base64.Это работает, но для TIF, только первая «страница» конвертируется, а последующие страницы / части отсутствуют.

    BASE64Decoder decoder = new BASE64Decoder();
    byte[] decodedBytes = null;
    File file = new File("newtif.tif");
    try {
        FileOutputStream fop;
        decodedBytes = new BASE64Decoder().decodeBuffer(imageString);
        fop = new FileOutputStream(file);
        fop.write(decodedBytes);
        fop.flush();
        fop.close();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

Я получил imageString из фактического файла с многостраничным TIF и преобразовал его в Base64используя:

        BufferedImage image = ImageIO.read(new File(fileLocation));
        BufferedImage newImg;

        ByteArrayOutputStream bos = new ByteArrayOutputStream();

        ImageIO.write(image, "tif", bos);
        byte[] imageBytes = bos.toByteArray();

        BASE64Encoder encoder = new BASE64Encoder();
        imageString = encoder.encode(imageBytes);

Заранее благодарю за помощь!

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Ваш кодировщик является проблемой.Это проблема, потому что Java не поддерживает несколько «кадров» для файлов gif и tif.

Вам необходимо изменить кодировщик так, чтобы он выдавал строку base64, не пропуская ее через классы изображений Java.

Это можно сделать с помощью Files.readAllBytes, при этом создается байтовый массив непосредственно из файла, и он не пытается прочитать его как изображение.

    byte[] imageBytes = Files.readAllBytes(new File(fileLocation).toPath());
    BASE64Encoder encoder = new BASE64Encoder();
    imageString = encoder.encode(imageBytes);
0 голосов
/ 14 марта 2019

Вы не можете просто использовать метод чтения ImageIO для чтения всех изображений TIF.В примере вы просто читаете первое изображение, потому что это то, что делает этот API.

См. Это: Не удается прочитать и записать файл изображения TIFF с использованием стандартной библиотеки Java ImageIO

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...