2013-05-07 2 views
0

Используется внизу, чтобы загрузить изображение.Размер изображения увеличивается

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
BufferedImage img = ImageIO.read(new File("abc.tiff")); 
ImageIO.write(img, "tiff", baos); 
img.flush(); 
img=null; 

byte[] bytes2 = baos.toByteArray(); 
if(baos != null) { 
    baos.flush(); 
    baos.close(); 
} 

System.out.println("bytes2 size::::" + bytes2.length); 

Мой оригинальный размер размолвка изображения составляет 119 кб, а когда я печатаю байты изображения я получаю длину 800974 байт.

Почему размер изображения увеличивается? и какова может быть проблема

ответ

0

Очевидно, что ваш файл abc.tiff архивирован (TIFF формат имеет архивированную версию), а img содержит неархивированные, распакованные данные. Вот почему ваш вывод 782 kb вместо 119.

+0

Неверно. Размер 'bytes2' - это размер (re) закодированного tiff изображения – leonbloy

+0

@leonbloy Ну, я не вижу разницы между вашим и моим ответом. Может быть, есть недоразумение: под термином «архивированный» я имел в виду «сжатый». Извините за мой плохой английский. – Andremoniy

+1

Вы правы, говоря, что 'img' содержит сырое изображение (и, следовательно, оно больше), но OP не измеряет это, он повторно сжимает img в новый TIFF (в памяти, в' baos') и измерение это. – leonbloy

0

Формат TIFF, как и большинство форматов изображений, поддерживает множество режимов изображения и стратегий сжатия. ImageIO.write() может не быть очень умным при оптимизации, или может потребоваться некоторая настройка. См., Например, here.

Смежные вопросы