2016-04-03 8 views
-2

Wie kann ich ein Array von Bytes in ein PNG-Bild (nicht als JPEG) konvertieren? Ich habe dies beim Codieren für Steganographie angetroffen. Ich kenne ein wenig Prozess, der dazwischen eine Konvertierung in BufferedImage erfordert. Bitte helfen Sie.Konvertieren von Byte-Array in PNG-Bild

+0

Ihre Bytes Graustufen- oder RGB24 sind? – Nayuki

+0

Mit welcher Sprache arbeiten Sie? Java hat eine gute Datei-Image-Konvertierung und das Schreiben von Bibliotheken. –

+0

Können Sie überprüfen, ob Sie mit Java arbeiten? Sie haben BufferedImage erwähnt. Und haben Sie tatsächlich nach Byte-Array zu BufferedImage gesucht? Ich wäre überrascht, wenn Sie keine Ergebnisse erhalten würden. https://stackoverflow.com/questions/12705385/how-to-convert-a-byte-to-a-bufferedimage-in-java – Reti43

Antwort

0

Nehmen wir an, Sie haben ein Array von Bytes mit der Länge = (Bildbreite * Bildhöhe * 3). Zuerst haben wir die Daten in ein BufferedImage packen:

import java.awt.BufferedImage; 
byte[] b = (...); 
BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
for (int y = 0; y < height; y++) { 
    for (int x = 0; x < width; x++) { 
     int off = (y * width + x) * 3; 
     int pix = (b[off] & 0xFF) << 16; // Red component 
     pix |= (b[off + 1] & 0xFF) << 8; // Green component 
     pix |= (b[off + 2] & 0xFF) << 0; // Blue component 
     img.setRGB(x, y, pix); 
    } 
} 

Und dann schreiben wir die Datei PNG-Bild:

import javax.imageio.ImageIO; 
ImageIO.write(img, "png", new File("output.png")); 
+0

Ich versuchte Ihren Code, aber es stoppt nicht. Alle Details, die ich habe, ist: Die Größe meiner Bytes Array ist 1316890 und Breite = 1024 und Höhe = 768. Das Bild, das ich verwendet habe, ist http://vignette3.wikia.nocookie.net/pokemon/images/b/b4/ Pokemon_Anime.png/Revision/späteste? Cb = 20110118234235 –

+0

Meine Schleifen terminieren ordnungsgemäß. Was meinst du damit, dass es nicht aufhört? Bitte geben Sie mir Informationen über welchen Code Sie laufen und welches Verhalten Sie beobachten – Nayuki

+0

Nun habe ich meinen Code ein wenig korrigiert und ich bekomme "ArrayIndexOutOfBound" Exception. Die Breite und Höhe, die von BufferedImage des ursprünglichen Bildes erhalten wird, ist 1024 bzw. 768. Als ich dieses BufferedImage in ein Array bytes umwandelte, ist die Größe des Arrays 1316890. Nun möchte ich das Byte-Array wieder in png image konvertieren. Bei Verwendung Ihres Codes erhalte ich die Ausnahme wie oben erwähnt. –