webentwicklung-frage-antwort-db.com.de

wie konvertiere ich ein Image in ein Byte-Array in Java?

Ich möchte ein Bild in ein Byte-Array und umgekehrt konvertieren. Hier gibt der Benutzer den Namen des Bildes ein (.jpg) und das Programm wird liest es aus der Datei und konvertiert es in ein Byte-Array.

58
userv

BufferedImage besteht aus zwei Hauptklassen: Raster & ColorModel. Raster selbst besteht aus zwei Klassen: DataBufferByte für Bildinhalt und die andere für Pixelfarbe.

wenn Sie die Daten von DataBufferByte erhalten möchten, verwenden Sie: 

public byte[] extractBytes (String ImageName) throws IOException {
 // open image
 File imgPath = new File(ImageName);
 BufferedImage bufferedImage = ImageIO.read(imgPath);

 // get DataBufferBytes from Raster
 WritableRaster raster = bufferedImage .getRaster();
 DataBufferByte data   = (DataBufferByte) raster.getDataBuffer();

 return ( data.getData() );
}

jetzt können Sie diese Bytes verarbeiten, indem Sie beispielsweise Text in lsb ausblenden oder ihn wie gewünscht verarbeiten.

61
Wajdy Essam

Wenn Sie JDK 7 verwenden, können Sie den folgenden Code verwenden.

import Java.nio.file.Files;
import Java.io.File;

File fi = new File("myfile.jpg");
byte[] fileContent = Files.readAllBytes(fi.toPath())
58
Darryl Coward
File fnew=new File("/tmp/rose.jpg");
BufferedImage originalImage=ImageIO.read(fnew);
ByteArrayOutputStream baos=new ByteArrayOutputStream();
ImageIO.write(originalImage, "jpg", baos );
byte[] imageInByte=baos.toByteArray();
26
user717325

Probieren Sie dieses Code-Snippet aus

BufferedImage image = ImageIO.read(new File("filename.jpg"));

// Process image

ImageIO.write(image, "jpg", new File("output.jpg"));
6
McK

Hier ist eine vollständige Version des Codes, um dies zu tun. Ich habe es getestet Die BufferedImage- und Base64-Klasse machen den Trick hauptsächlich. Einige Parameter müssen auch richtig eingestellt werden. 

public class SimpleConvertImage {
    public static void main(String[] args) throws IOException{
        String dirName="C:\\";
        ByteArrayOutputStream baos=new ByteArrayOutputStream(1000);
        BufferedImage img=ImageIO.read(new File(dirName,"rose.jpg"));
        ImageIO.write(img, "jpg", baos);
        baos.flush();

        String base64String=Base64.encode(baos.toByteArray());
        baos.close();

        byte[] bytearray = Base64.decode(base64String);

        BufferedImage imag=ImageIO.read(new ByteArrayInputStream(bytearray));
        ImageIO.write(imag, "jpg", new File(dirName,"snap.jpg"));
    }
}

Referenzlink

5
Ryan

Schauen Sie sich javax.imageio an, insbesondere ImageReader und ImageWriter als Abstraktion zum Lesen und Schreiben von Bilddateien.

Mit BufferedImage.getRGB(int x, int y) können Sie RGB-Werte für das angegebene Pixel abrufen, die in Byte aufgeteilt werden können.

Hinweis: Ich denke, Sie möchten die rohen Bytes nicht lesen, da Sie dann mit der gesamten Komprimierung/Dekomprimierung umgehen müssen.

3
b_erb

Java.io.FileInputStream ist was Sie suchen :-)

2
Vanya

Ich denke, der beste Weg ist, die Datei zuerst in ein Bytearray zu lesen und dann das Array mit ImageIO.read () in ein Image zu konvertieren.

0
Maurice Perry

Die Verwendung von RandomAccessFile wäre einfach und praktisch.

RandomAccessFile f = new RandomAccessFile(filepath, "r");
byte[] bytes = new byte[(int) f.length()];
f.read(bytes);
f.close();