Конвертировать BufferedImage в byte [] без потери качества и увеличения размера - PullRequest
1 голос
/ 20 января 2012

Я пытаюсь преобразовать BufferedImage в байтовый массив. У меня есть два условия. 1. Я не должен терять качество изображения. 2. Размер байтового массива должен соответствовать реальному изображению. Я попробовал пару вариантов.

Вариант 1:

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write(image, "png", baos);
        baos.flush();
        byte[] imageBytes = baos.toByteArray();
        baos.close();

Вариант 2:

        WritableRaster raster = image.getRaster();
        DataBufferByte data   = (DataBufferByte) raster.getDataBuffer();
        byte[] imageBytes = data.getData();

Оба эти параметра увеличивают размер изображения (более чем в два раза для больших изображений).

Ценю любую помощь. Спасибо!

1 Ответ

2 голосов
/ 20 января 2012

В формате PNG используется сжатие данных без потерь , поэтому вам не нужно беспокоиться о потере качества изображения с вашим вариантом 1.

Как вы видите увеличениеразмер изображения?Я уверен, что вы знаете, что такое imageBytes.length.Что вы сравниваете с тем, что думаете, что это вдвое больше, чем должно быть?(Я думаю, что ваше предположение может быть неверным.)

Возможно, ваш исходный файл просто использует более высокую настройку сжатия, чем Java сжимает его повторно.Возможно, вам придется передать некоторые дополнительные параметры в ваш писатель.См. , как сжимать изображение PNG с использованием Java для получения дополнительной информации - в частности, ссылка на http://www.exampledepot.com/egs/javax.imageio/JpegWrite.html.

...