отображение изображения, созданного напрямую с помощью chunkypng (без сохранения) - PullRequest
6 голосов
/ 05 января 2012

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

проблема в том, что это приводит к ошибке invalid byte sequence in UTF-8 на мой взгляд.

что я сделал:

# controller
@img = source_img.resize(200, 200).to_string

#view
<img src="data:image/png;base64,<%= @img %>" />

отладка переменной @img с помощью raise @img.to_yaml выводит мне правильную строку, например ::1122*

--- !binary |-
    iVBORw0KGgoAAAANSUhEUgAAAMgAAADIAQAAAACFI5MzAAACP0lEQVR4nO1Y
    QY6jQAy0AxJ9a34AH8l29lmRhgDJSDxrwsxHmh80N5Ag3urkjFZabTw5TJ+g
    HclWUa6ys5Ots6Ot8xP5/xFhnJIGxo/GdDD9HC+al6iNMpGFVie3kXOiyZET
    8bq49cAipRn5bVXOB+CVPiXPXyMRhQb1PDvPRmQZAMWOam/cN1TgpKFEyIVT
    pENLDF6oVoCuSCkdSIokEJnICy41K+AojX4psutY5+8011m80O1T4YpXxsOJ
    3mjqo2A8Jc+/RD7txVNhWFrJPDnTF41uBfPvoXKJHw/jjt7QLMThqKuj2Ufe
    +bUEFDeigtykr1UsVQkT2TP0cjA0H6wuR4VPkKilmMCDACjISmhLXc/64Ap+
    mp3RJZ3IFTVpe9aXXHxawKzOY/Ss8WCVHX2u7hjYNa/yxNsWSrEULzJT0Cd1
    XgToXEDWx/WgWRtPHKkZGSJ86ccDHjqvy9E1ryHfKORkmwJ+5u7NoqoUoXXQ
    axqTYS6Ng2jWukoBD6/7qI+2sc2AmUIKLnUxkHzFMDURVXdHx3hT97pd8hU6
    v9B8Ghs0qOnhIO9PybMZQRuumKTM42Ii3o2zew2lYLnBvRKP9ryErjeEd10/
    fexmaznti8ZWbopoJV5XKeIGJp6TUEEyDGVXZbV8bGCMqRPbTyQnlpDjNzAk
    gZXbNhxLINKH5+XZjsxsJD8DAwjGPtf+CnEDI8xVIX4HQ4aDtlLEDSzx5hdk
    M77FuUp5/9mKPHazu5LX97+wMH42qhX8RP4AQpEyh+7r4x0AAAAASUVORK5C
    YII=

Копирование этой строки вручную в тег img правильно отображает изображение.

есть идеи, что здесь происходит не так? другие идеи отображения этого изображения напрямую без сохранения?

спасибо заранее! если что-то неясно, ПОЖАЛУЙСТА, оставьте комментарий.

Ответы [ 2 ]

9 голосов
/ 06 января 2012

ChunkyPNG на самом деле поставляется со встроенной функцией, которая делает именно это: to_data_url.

# controller
@img = source_img.resize(200, 200)

# view
<img src="<%= @img.to_data_url %>" />

Это реализовано так:

['data:image/png;base64,', @img.to_blob].pack('A*m').gsub(/\n/, '')

Убедитесь, что вы используете последнюю версию ChunkyPNG.

4 голосов
/ 24 июля 2013

Путь @wvanbergen дал мне несколько ошибок, но я немного изменился, и это сработало.

    #controller
    @png = qr.to_img.resize(250,250).to_data_url 

    #view
    <%= image_tag @png %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...