2016-07-28 3 views
1

Я хочу преобразовать массив байтов из JPEG в Java. Ниже код делает неправильный мой запрос.Преобразование в байты из jpeg в java

BufferedImage img=Image.read("C:\blabla"); 
WritableRaster raster=img.getRaster(); 
DataBufferByte buffer=(DataBufferByte)raster.getDataBuffer(); 
byte[] jpegbytes=buffer.getData(); 

Когда я выполняю это, вы получаете неправильный номер байта. JPEG имеет размер 845,941 байт на диске. Но он возвращает размер 2 359 296 байт в jpegbytes. Как я могу исправить значение байта? Я думаю, BufferedImage класс получает неправду.

+2

Jpegs - сжатые данные. Если вы считаете, что jpeg является «правильным размером», получите размер файла и не читайте изображение в «BufferedImage». – fabian

+0

Какой класс 'Image' вы используете? Я не вижу никакого метода 'read' в [JDK] (https://docs.oracle.com/javase/8/docs/api/java/awt/Image.html) – 4castle

+0

@ 4castle класс является' javax .imageio.ImageIO', я думаю, OP сделал опечатку. – Sam

ответ

0

Вы можете записать любой файл в массив байтов, записав содержимое своего FileInputStream в ByteArrayOutputStream и вызывая toByteArray().

public byte[] fileToBytes(String filename) throws IOException { 
    final byte[] buffer = new byte[256]; 
    try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { 
     try (InputStream in = new FileInputStream(new File(filename))) { 
      int bytesRead; 
      while ((bytesRead = in.read(buffer)) > 0) 
       out.write(buffer, 0, bytesRead); 
     } 
     return out.toByteArray(); 
    } 
} 
+0

большое вам спасибо. – vahitdurmus

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