2016-09-28 154 views
0

我有一个GET请求迷上了这种方法的控制器:如何在http请求中呈现png?

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" 
} 

但是,当我得到的响应图像,它的编码与奇怪的字符。如何检索图像并正确解码以便可以通过浏览器进行渲染?

+0

我觉得

/* 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代码,在这一点上,你只需要告诉它的图像浏览器字节。 http://stackoverflow.com/questions/12041851/converting-bytes-to-an-image-for-drawing-on-a-html5-canvas – elixir

+0

我不明白 – dopatraman

+0

你可能需要发送一个内容类型头:'Content-type:image/png'不知道如何用这种语言做到这一点,尽管 –

回答

0

我已经通过将inputStream转换为Base64.encode getbyte代码将它呈现给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脚本代码获取图像,我们希望呈现图像

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

响应必须指定一种内容类型 – dopatraman