2012-01-05 12 views
6

, więc utworzyłem obraz PNG przy użyciu chunky_png. Nie chcę zapisywać tego obrazu, ponieważ jest on przydatny tylko dla tego jednego żądania, więc próbuję zapisać ten obraz jako zmienną instancji i wyświetlić go w moim widoku.Wyświetlanie obrazu utworzonego bezpośrednio z chunkypng (bez zapisywania)

Problem polega na tym, że w moim widoku wystąpił błąd invalid byte sequence in UTF-8.

co zrobiłem:

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

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

debugowania zmienną @img z raise @img.to_yaml wyjść mi prawidłowy ciąg, f.e .:

--- !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= 

copiing ten ciąg ręcznie do znacznika img wyświetla obraz prawidłowo.

Jakieś pomysły, co tu jest nie tak? inne pomysły na wyświetlanie tego obrazu bezpośrednio bez oszczędzania?

z góry dzięki! jeśli coś jest niejasne, PROSIMY o komentarz.

+0

Czy próbowałeś dodać to_yaml do swojego src attr? – Yule

+0

@Yule '.to_yaml' nie powoduje awarii aplikacji, ale oczywiście obraz nie zostanie wyświetlony z powodu formatowania yaml. – choise

+0

trochę hack, ale co z .to_yaml.to_s? – Yule

Odpowiedz

8

ChunkyPNG ma wbudowaną funkcję umożliwiającą wykonanie następujących czynności: to_data_url.

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

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

Jest realizowany tak:

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

Upewnij się, że korzystasz z najnowszej wersji ChunkyPNG.

+0

czy szyny udostępniają metodę pomocniczą do wyświetlania obrazów z ciągami danych? – choise

3

Sposób @wvanbergen dał mi trochę błędów, ale trochę się zmieniłem i zadziałało.

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

    #view 
    <%= image_tag @png %> 
Powiązane problemy