2012-01-05 39 views
6

chunkypng ile oluşturulan bir görüntüyü görüntüleyerek chunky_png kullanarak bir PNG görüntüsü oluşturdum. Bu görüntüyü kaydetmek istemiyorum, çünkü bu sadece bir istek için kullanışlıdır, bu yüzden bu resmi bir örnek değişkeni olarak kaydetmeye ve bunu kendi görünümümde göstermeye çalışıyorum., doğrudan

Bu sorun, bir invalid byte sequence in UTF-8 hatasını görüntülemem gerekiyor.

ı yaptıklarını:

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

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

doğru img etiketi içine görüntüyü manuel Bu dize görüntüler copiing beni doğru dize, 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= 

raise @img.to_yaml çıkışları ile @img değişkeni ayıklama.

herhangi bir fikir burada neyin yanlış gidiyor? Bu görüntüyü kaydetmeden doğrudan görüntülemenin diğer fikirleri?

şimdiden teşekkürler! bir şey belirsiz ise, lütfen bir yorum bırakın.

+0

src attr'a to_yaml eklemeyi denediniz mi? – Yule

+0

@Yule '.to_yaml', uygulamamı çökertmez, ancak tabii ki yaml biçimlendirmesi nedeniyle resim görüntülenmeyecektir. Bir hack – choise

+0

bit, ama ne hakkında .to_yaml.to_s? – Yule

cevap

8

ChunkyPNG, aslında bunu yapmak için yerleşik bir işlevle gelir: to_data_url.

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

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

Böyle uygulanacağı:

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

Eğer ChunkyPNG en son sürümünü kullandığınızdan emin olun.

+0

rayları, görüntülerin veri dizeleriyle görüntülenmesi için yardımcı bir yöntem sunuyor mu? – choise

3

@wvanbergen yolu bana bazı hatalar verdi, ancak biraz değiştim ve işe yaradı.

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

    #view 
    <%= image_tag @png %>