Grails 如何在TagLib中使用pngRenderingService.render来获取图像标记,而不是<;img>;

Grails 如何在TagLib中使用pngRenderingService.render来获取图像标记,而不是<;img>;,grails,png,rendering,Grails,Png,Rendering,我使用Taglib根据项目类型呈现媒体标记 def item=attrs['bean'] if(item?.type=='img') { out << '<img src="'+item?.src+'" />' }else if(item?.type=='audio') { out<< '<audio src="'+item?.src+'" />' } //..........

我使用Taglib
根据项目类型呈现媒体标记

def item=attrs['bean']    
if(item?.type=='img')
    {
      out << '<img src="'+item?.src+'" />'
    }else if(item?.type=='audio') {
       out<< '<audio src="'+item?.src+'" />'
    }
      //..........
def item=attrs['bean']
如果(项目?.type=='img')
{

out首先,您必须以字节为单位转换图像,然后使用渲染插件标记库渲染图像,例如

 File imageFile = new File(servletContext.getRealPath("images/imageName.png"))
 out << rendering.inlinePng(bytes: imageFile.bytes)
File imageFile=新文件(servletContext.getRealPath(“images/imageName.png”))
出来
String dir=attrs.remove('dir')
String file=attrs.remove('文件')
File imageFile=新文件(servletContext.getRealPath(“/${dir}/${File}”))

out首先,您必须以字节为单位转换图像,然后使用渲染插件标记库渲染图像,例如

 File imageFile = new File(servletContext.getRealPath("images/imageName.png"))
 out << rendering.inlinePng(bytes: imageFile.bytes)
File imageFile=新文件(servletContext.getRealPath(“images/imageName.png”))
出来
String dir=attrs.remove('dir')
String file=attrs.remove('文件')
File imageFile=新文件(servletContext.getRealPath(“/${dir}/${File}”))

您的意思是:renderingService.inlinePng而不是rendering.inlinePng,因为我尝试了:rendering.inlinePng、renderingService.inlinePng和pngRenderingService.inlinePng。它在VAIN中。请尝试我发布的标记库上面,并在示例图像上测试它。我测试了它,得到了以下错误:getWriter()已经为此响应调用了…在grails.plugin.rendering.RenderingService.writeToResponse(RenderingService.groovy:82)上,不能在同一响应上同时调用getOutputStream()和getWriter()。请记住JSP隐式使用getWriter()。请再试一次,不要直接使用渲染标记库,而是打开它的标记库,复制渲染图像的代码并在标记库中使用。请参阅我编辑的答案。您的意思是:renderingService.inlinePng而不是rendering.inlinePng,因为我尝试了:rendering.inlinePng、renderingService.inlinePng和pngRenderingService.inlinePng。它在va中请尝试上面我发布的标记库并在一个示例图像上测试它。我测试了它,得到了以下错误:getWriter()已经被调用用于此响应…在grails.plugin.rendering.RenderingService.writeToResponse(RenderingService.groovy:82)中,您不能同时调用getOutputStream()和getWriter()在相同的响应上。请记住JSP隐式使用getWriter()。
out << '<img src="data:'
out << 'image/png'
out << ';base64,'
out << new String(new Base64().encode(imageFile.bytes), "UTF-8")
out << '" />'