2017-11-21 4 views
-4

Ich habe Probleme, ein Byte [] zu einem BufferedImage zu konvertieren. Ich weiß, dass es viele Posts und Fragen-Antworten gibt, aber ich kann nicht verstehen, warum mein Code falsch ist. (Fehler: Ausnahme im Thread "main" java.lang.IllegalArgumentException: image == null!)Konvertiere ein Byte [] in ein BufferedImage

Vielen Dank!

try { 
     String hex = "57656c636f6d652c206d7920667269656e642e"; 
     byte[] im = DatatypeConverter.parseHexBinary(hex); 
     InputStream in = new ByteArrayInputStream(im); 
     BufferedImage bImageFromConvert = ImageIO.read(in); 
     ImageIO.write(bImageFromConvert, "jpg", new File("c:/welcome.jpg")); 
    } catch (Exception ex) { 
    } 
+2

Ok, so entschlüsselte ich die Hex-Zeichenfolge und es heißt "Willkommen, mein Freund." ImageIO.read() liest Dateien wie JPGs und PNGs. Was hast du erwartet mit einer Reihe von Ascii? – slipperyseal

+0

Um Text in ein Bild zu konvertieren, müssen Sie ein gepuffertes Bild der erforderlichen Größe erstellen, den Hintergrund wie gewünscht ausfüllen, eine Farbe festlegen, eine Schriftart festlegen und dann die Zeichenkette darauf zeichnen. Sie können nicht einfach Text in ein Bild mit ein paar Zeilen Code (nicht mit der Java-Standard-Bibliothek sowieso) – slipperyseal

+0

Sie können nicht sehen, warum Ihr Code falsch ist? Wie kannst du dir überhaupt vorstellen, dass dein Code richtig war? – Kayaman

Antwort

0

Wenn ich Sie richtig verstehe, müssen Sie nur

File newfile = new File("c:/welcome.jpg"); 
newfile.exists(); 

verwenden newfile zu überprüfen gibt es sie.

+1

es ist nicht möglich, die Datei zu schreiben, weil es nicht konvertieren kann "Willkommen, mein Freund." in ein Bild. die Prämisse, dass ImageIO.read() das tun wird, ist falsch – slipperyseal

0

OK. Ich habe getan, was slipperseal gesagt hat und gearbeitet hat. Vielen Dank. Der Code ist unten.

try { 
     Font font = new Font("Arial", 0, 32); 
     BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB); 
     FontMetrics fm = img.getGraphics().getFontMetrics(font); 
     int width = fm.stringWidth("Welcome, my friend."); 
     int height = fm.getHeight(); 
     int padding = 7; 

     BufferedImage bgImage = new BufferedImage(width+padding*2, height, BufferedImage.TYPE_INT_ARGB); 

     Graphics2D drawer = bgImage.createGraphics() ; 
     drawer.setBackground(Color.white); 
     drawer.clearRect(0,0,(int)width+padding*2,(int)height); 
     drawer.setColor(Color.black); 
     drawer.setFont(font); 
     drawer.drawString("Welcome, my friend.", padding, height-padding); 

     ImageIO.write(bgImage, "png", new File("c:/welcome.png")); 

    } catch (IOException e) { 
      System.out.println(e.getMessage()); 
    } 

Gibt es ein Problem mit diesem Code? Wie schlechte Übung, ...

+0

Das mag funktionieren, aber ich sehe nicht, wie es mit der Frage zusammenhängt ... Dies ist die Antwort auf "Wie erstelle ich ein Bild, zeichnen Sie eine Zeichenkette an und speichern Sie es als JPEG? "... – haraldK