2016-07-28 15 views
1

Ich möchte Byte-Array von JPEG in Java konvertieren. Unten Code macht meine Anfrage falsch.Konvertieren in Bytes von JPEG in Java

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

Bei der Ausführung gibt es falsche Byte-Nummer. JPEG hat eine Größe von 845,941 Bytes auf der Festplatte. Aber es gibt Größe 2 359 296 Bytes in jpegbytes zurück. Wie kann ich den Bytewert korrigieren? Ich denke, BufferedImage Klasse bekommt falsch.

+2

Jpegs sind komprimierte Daten. Wenn Sie denken, dass die JPEG-Datei die "richtige Größe" hat, ermitteln Sie die Dateigröße und lesen Sie das Bild nicht in "BufferedImage". – fabian

+0

Welche 'Image' Klasse verwenden Sie? Ich sehe keine 'read'-Methode in der [JDK] (https://docs.oracle.com/javase/8/docs/api/java/awt/Image.html) – 4castle

+0

@ 4castle die Klasse ist' javax .imageio.ImageIO', ich denke, der OP hat einen Tippfehler gemacht. – Sam

Antwort

0

Sie können jede Datei in ein Bytearray schreiben, indem Sie den Inhalt von FileInputStream in einen ByteArrayOutputStream schreiben und toByteArray() aufrufen.

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

vielen Dank. – vahitdurmus