2016-09-28 2 views
0

Ich habe einen Controller auf diese Methode von einer GET-Anfrage angeschlossen:Wie png in http-Anfrage rendern?

def renderPNG() { 
    URL url = new URL("https://absolute.url.png"); 
    BufferedImage img = ImageIO.read(url); 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    ImageIO.write(img, "png", baos); 
    InputStream is = new ByteArrayInputStream(baos.toByteArray()); 
    DataInputStream ds = new DataInputStream(is); 

    render file: ds, contentType: "image/png" 
} 

Aber wenn ich das Bild in der Antwort zu erhalten, ist es mit seltsamen Zeichen codiert. Wie kann ich das Bild abrufen und decodieren, damit es von einem Browser gerendert werden kann?

+0

Ich denke, an diesem Punkt müssen Sie nur den Browser sagen, das Bild machen wollen, dass es Bild ist Byte. http://stackoverflow.com/questions/12041851/converting-bytes-to-an-image-for-drawing-on-a-html5-canvas – elixir

+0

Ich verstehe nicht – dopatraman

+0

Sie werden wahrscheinlich eine Content-Type-Header senden müssen : 'Content-type: image/png' weiß nicht, wie man das in dieser Sprache tut –

Antwort

0

Ich habe Ihr Problem gelöst, indem Sie inputStream zu Base64.encode Getbyte-Code von diesem rendern es auf die Veiw.

def renderPNG() { 
URL url = new URL("http://tineye.com/images/widgets/mona.jpg"); 
      BufferedImage img = ImageIO.read(url); 
      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      ImageIO.write(img, "png", baos); 
      InputStream is = new ByteArrayInputStream(baos.toByteArray()); 
     render(Base64.encode(is?.getBytes())) 
} 

Java-Script-Code holen das Bild

/* fetch the user image */ 
      $.ajax({ 
       url: "/controller/renderPNG", 
       type: 'GET', 
       cache: false, 
       success: function (result) { 
        document.getElementById('userImage').src = "data:image/png;base64," + result; 
       } 
      }); 

HTML-Code, wo wir

<div><img id="userImage" src=""alt="User Image"></div> 
+0

Die Antwort muss einen Inhaltstyp angeben – dopatraman