Ich möchte ein Bild in Byte-Array konvertieren und umgekehrt. Hier wird der Benutzer den Namen des Bildes eingeben (.jpg
) und das Programm wird lesen es aus der Datei und wird es in ein Byte-Array konvertieren.Wie konvertiert man Bild in Byte-Array in Java?
Antwort
BufferedImage besteht aus zwei Hauptklassen: Raster & ColorModel. Raster selbst besteht aus zwei Klassen, DataBufferByte für Bildinhalt während der andere für Pixelfarbe.
, wenn Sie die Daten aus DataBufferByte wollen, 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 dieses Bytes verarbeiten, indem versteckten Text in lsb zum Beispiel, oder zu verarbeiten, wie Sie wollen.
Wenn das Bild durch ein kurzes Array gesichert wird (was für mich und ein TIF-Bild der Fall war), erhalten Sie einen DataBufferShort, was zu einer Cast Exception – Karussell
für diese Klassen führt. Benötige ich zusätzliche Jars? – praveen
Nein, in Eclipse verwenden Sie einfach Strg + Shift + o. – RichardK
java.io.FileInputStream ist, was Sie für :-)
Check out javax.imageio
, insbesondere ImageReader
und ImageWriter
als Abstraktion zum Lesen und Schreiben von Bilddateien suchen.
BufferedImage.getRGB(int x, int y)
als Sie können RGB-Werte auf dem gegebenen Pixel erhalten, die in Bytes chunked werden können.
Hinweis: Ich denke, dass Sie nicht die rohen Bytes lesen möchten, weil Sie dann mit der ganzen Komprimierung/Dekompression umgehen müssen.
Ich denke, der beste Weg, dies zu tun, ist die Datei in einen Byte-Array, dann konvertiert das Array zu einem Bild mit ImageIO.read()
Versuchen Sie, diesen Code-Schnipsel
BufferedImage image = ImageIO.read(new File("filename.jpg"));
// Process image
ImageIO.write(image, "jpg", new File("output.jpg"));
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();
Wenn Sie JDK 7 verwendet werden, 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())
ist die komplette Version von Code, dies zu tun. Ich habe es getestet. Die BufferedImage
und Base64
Klasse machen den Trick hauptsächlich. Auch einige Parameter müssen korrekt eingestellt sein.
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"));
}
}
diesen Code Versuchen:
public class ImageTest {
public static void main(String[] args) {
try {
byte[] imageInByte;
BufferedImage originalImage = ImageIO.read(new File(
"c:/darksouls.jpg"));
// convert BufferedImage to byte array
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(originalImage, "jpg", baos);
baos.flush();
imageInByte = baos.toByteArray();
baos.close();
// convert byte array back to BufferedImage
InputStream in = new ByteArrayInputStream(imageInByte);
BufferedImage bImageFromConvert = ImageIO.read(in);
ImageIO.write(bImageFromConvert, "jpg", new File(
"c:/new-darksouls.jpg"));
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
RandomAccessFile
Mit einfachen und praktisch sein würde.
RandomAccessFile f = new RandomAccessFile(filepath, "r");
byte[] bytes = new byte[(int) f.length()];
f.read(bytes);
f.close();
- 1. Wie konvertiert man Bytearray zu Bild oder Bild zu Bytearray?
- 2. Wie konvertiert man Byte-Array in Hex-Format in Java
- 3. Wie konvertiert man ein Bild zu Base64 String in Java?
- 4. Android: conerting Bild in byteArray
- 5. PIL: Bytearray in Bild konvertieren
- 6. Wie konvertiert man Text in Bild?
- 7. Wie konvertiert man Textdaten in ein Bild?
- 8. Wie konvertiert man ein Bild in Zeichensegmente?
- 9. Wie konvertiert man ein Pyglet-Bild in ein PIL-Bild?
- 10. Bytearray zu Bild asp.net
- 11. Wie konvertiert man Java String in byte []?
- 12. Wie konvertiert man char [] in Java?
- 13. Java - Wie konvertiert man Typensammlung in ArrayList?
- 14. Wie konvertiert man Java-Code in mapreduce?
- 15. Wie konvertiert man eine HTML-Webseite in ein Bild
- 16. Wie konvertiert man Knoten zu Bild in javafx 2.1?
- 17. Sende ByteArray an JavaScript
- 18. Wie konvertiert man ein Bild in eine Matrix in opencv
- 19. Wie konvertiert man ein Bitmap-Bild in IntPtr in C#?
- 20. Wie konvertiert man ein Bild in Graustufen in nativen reagieren?
- 21. Wie konvertiert man Java 8 map.remove in Java 1.6?
- 22. Wie konvertiert man Array von Bytes in Bild in Java SE
- 23. Konvertieren von ByteArray in UUID Java
- 24. Wie konvertiert man ein IplImage in Mat?
- 25. Wie konvertiert man String in String [] in Java?
- 26. Wie konvertiert man Mat in Interger Array in OpenCV Java?
- 27. Wie konvertiert man String in String Array in Java?
- 28. Wie konvertiert man Vektor in Java in String?
- 29. Wie konvertiert man die hexadezimale Zeichenfolge in Float in Java?
- 30. Wie konvertiert man den DataInputStream in den String in Java?
Wahrscheinlich kein Duplikat: Die Frage Asker bedeutet komprimierte Bilddatei in Raster, nicht wie komprimierte Bytes zu lesen. –
Zustimmen, das ist * nicht * ein Duplikat der markierten Frage (zumindest nicht unter Bezugnahme auf die angenommene Antwort). Abstimmung zum erneuten Öffnen – haraldK
Dies ist kein Duplikat, da 'File' sich sehr stark von' Image' unterscheidet. –