Как отобразить динамически генерируемое изображение (штрих-код) на веб-странице? - PullRequest
0 голосов
/ 21 января 2011

У меня есть штрих-код, который я генерирую динамически, и я хочу перейти на gsp, который позже станет PDF. Мне не нужно сохранять штрих-код для каких-либо собственных целей, и я хотел бы просто передать изображение с контроллера в gsp.

Есть ли способ визуализации изображения, которое передается как переменная, вместо указания src?

Заранее спасибо.

РЕДАКТИРОВАТЬ:

Так как я генерирую pdf из gsp, я сбрасываю поток вывода ответа и поэтому не могу сделать это с изображением, или я получаю ошибку.

Кроме того, использование javascript / jQuery не работает, поскольку страница никогда не отображается непосредственно браузером.

Может показаться, что у меня есть единственная возможность - временно сохранить изображения где-нибудь, а затем удалить их ...

Ответы [ 3 ]

2 голосов
/ 21 января 2011

Я недавно ответил на аналогичный вопрос , возможно, его ответ будет работать для вас. Я вставлю часть этого здесь. Это в основном предложение Одеда "вне этого ...".

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()
    }
}

После этого вы можете получить доступ к своему изображению в теге, например:

<img src="${g.link(controller: 'barcode', action: 'index')}"/>

Этот ответ, похоже, соответствует последнему комментарию, который вы сделали по этому вопросу (о похожем решении с использованием PHP).

0 голосов
/ 31 марта 2015

Просто хочу внести свой вклад в этот извечный вопрос.Я получил эту работу, добавив следующие строки в BuildConfig.groovy:

В разделе plugins:

 plugins {
     // other plugins here
     // ...
     compile ":barcode4j:0.3"
     compile ":rendering:1.0.0"
 } 

В разделе dependencies:

 dependencies {
     // other dependencies here
     // ...
     compile 'avalon-framework:avalon-framework:4.1.5'
 }

Затем я добавил контроллер на основе примеров кода, которые я нашел в сети.Мне конкретно нужен генератор DataMatrix, но добавить другие должно быть легко, просто добавив методы в контроллер.Извините за плохое качество кода (я новичок в Groovy):

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 в виде штрих-кода для тестирования:

<%@ 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 голосов
/ 21 января 2011

Вы можете использовать схему URI данных для атрибута src.

Схема URI данных - это схема URI, которая обеспечивает способ включения данных на веб-страницах, как если бы они были внешними ресурсами.

Вот пример из статьи в Википедии:

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

Помимо этого, если вы используете технологию на стороне сервера, вы можете передавать данные изображения из скрипта (с правильным mime-типом) и указывать на него атрибут src.

Здесь - это связанный вопрос SO для Grails.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...