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.
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.
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())
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();
Probieren Sie dieses Code-Snippet aus
BufferedImage image = ImageIO.read(new File("filename.jpg"));
// Process image
ImageIO.write(image, "jpg", new File("output.jpg"));
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"));
}
}
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.
Java.io.FileInputStream ist was Sie suchen :-)
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.
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();