首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在网页上显示动态生成的图片(条形码)?

如何在网页上显示动态生成的图片(条形码)?
EN

Stack Overflow用户
提问于 2011-01-21 05:02:00
回答 3查看 3.4K关注 0票数 0

我有一个条形码,我是动态生成的,并希望传递给gsp,它稍后将成为pdf。我不需要为我自己的任何目的持久化条形码,只想简单地将图像从控制器传递到gsp。

有没有一种方法可以渲染作为变量传递的图像而不是指定src?

提前谢谢。

编辑:

因为我是从gsp生成pdf的,所以我刷新了响应的输出流,因此不能对图像也这样做,否则我会得到一个错误。

此外,使用javascript/jQuery不起作用,因为浏览器从不直接呈现页面。

看起来我唯一的选择就是将图片暂时保存在某个地方,然后删除它们……

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-21 06:19:11

我最近回答了一个similar question,也许它的答案对你有用。我将在这里粘贴它的一部分。基本上就是奥德的“在这之外...”建议。

代码语言:javascript
复制
class BarcodeController {
    def index = {
        def img // byte array, set this to the binary contents of your image

        response.setHeader('Content-length', img.length)
        response.contentType = 'image/png' // or the appropriate image content type
        response.outputStream << img
        response.outputStream.flush()
    }
}

然后,您可以在标签的src中访问图像,如下所示:

代码语言:javascript
复制
<img src="${g.link(controller: 'barcode', action: 'index')}"/>

这个答案似乎符合您对这个问题(关于使用PHP的类似解决方案)所做的最后一条评论。

票数 2
EN

Stack Overflow用户

发布于 2011-01-21 05:11:26

您可以为src属性使用data URI scheme

数据URI方案是一种URI方案,它提供了一种在网页中包含内嵌数据的方法,就像它们是外部资源一样。

下面是维基百科文章中的一个例子:

代码语言:javascript
复制
<img src="data:image/png;base64,
iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGP
C/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YGARc5KB0XV+IA
AAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAF1J
REFUGNO9zL0NglAAxPEfdLTs4BZM4DIO4C7OwQg2JoQ9LE1exdlYvBBeZ7jq
ch9//q1uH4TLzw4d6+ErXMMcXuHWxId3KOETnnXXV6MJpcq2MLaI97CER3N0
vr4MkhoXe0rZigAAAABJRU5ErkJggg==" alt="Red dot" />

除此之外,如果您使用的是服务器端技术,则可以从脚本(使用正确的mime类型)流式传输图像数据,并将src属性指向该脚本。

Here是一个与grails相关的SO问题。

票数 0
EN

Stack Overflow用户

发布于 2015-03-31 06:17:09

我只想为这个古老的问题做点贡献。我通过向BuildConfig.groovy添加以下几行代码来实现这一点

plugins部分中:

代码语言:javascript
复制
 plugins {
     // other plugins here
     // ...
     compile ":barcode4j:0.3"
     compile ":rendering:1.0.0"
 } 

dependencies部分中:

代码语言:javascript
复制
 dependencies {
     // other dependencies here
     // ...
     compile 'avalon-framework:avalon-framework:4.1.5'
 }

然后,我根据在网上找到的代码示例添加了一个控制器。我特别需要一个DataMatrix生成器,但添加其他生成器应该很容易,只需向控制器添加方法即可。对于质量不佳的代码我很抱歉(我是Groovy新手):

代码语言:javascript
复制
package myproject

import org.krysalis.barcode4j.impl.datamatrix.DataMatrix
import java.awt.Dimension

class BarcodeController {

    //  a valid PNG image, base64 encoded  
    static invalidBarcodeImgBase64 = """iVBORw0KGgoAA...=="""

    // Needs index.gsp for testing
    def index() {
        ['uuid': UUID.randomUUID(), 'fecha': new Date()]
    }

    def dataMatrix(String value) {

        if ((null == value) || (value.length() < 1) || (value.length() > 2000)) {
            def img = invalidBarcodeImgBase64.decodeBase64()
            response.setHeader('Content-length', new Integer(img.length).toString())
            response.contentType = 'image/png'
            response.outputStream << img
            response.outputStream.flush()

        } else {
            def generator = new DataMatrix()
            generator.dataMatrixBean.setMinSize(new Dimension(16, 16))
            renderBarcodePng(generator, value, [antiAlias: false])
        }
    }

    def datamatrix(String value) {
        dataMatrix(value)
    }
}

最后,这里是用于测试的条形码视图中的index.gsp

代码语言:javascript
复制
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
  <head>
    <title>DataMatrix</title>
  </head>

  <body>
    <g:img dir="barcode" file="dataMatrix?value=${uuid}"/>
    <br />
    <br />
    <g:img dir="barcode" file="dataMatrix?value=${fecha}"/>
    <br />
    <br />
    <g:img dir="barcode" file="dataMatrix?value=Nothing to see here"/>
  </body>
</html>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4752539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档