从TagLib渲染图像

时间:2011-12-23 09:30:34

标签: grails groovy

在Grails控制器中,我可以使用

将图像渲染到响应中
class MyController {

  def getImage = {
    BufferedImage image = ImageIO.read('http://example.org/foo.png')
    ImageIO.write(captcha, "PNG", response.outputStream)
  }
}

在GSP中,我可以使用以下方式渲染此图像:

<img src="${createLink(controller: 'my', action: 'getImage')}"/>

我想编写一个类似的TagLib。

class MyTagLib {
  static namespace = "my"

  def getImage(attrs ->
    BufferedImage image = ImageIO.read('http://example.org/foo.png')            
  }    
}

但我无法弄清楚如何将此图像渲染到响应中。在标记类中,我只能写入out GrailsPrintWriter的实例,但ImageIO.write只能写入OutputStream

为了完成,上面的标签将使用

从GSP调用
<my:getImage/>

1 个答案:

答案 0 :(得分:2)

您可以通过GrailsPrintWriter创建new WriterOutputStream(out)的编写器实例。试试这个:

BufferedImage image = ImageIO.read(new URL('http://www.google.de/images/srpr/logo3w.png'))
ImageIO.write(image, "png", new WriterOutputStream(out))

(在grails 2.0中测试)