所以我用chunky_png创建了一个PNG图像。我不想保存这个图像,因为它只对这一个请求有用,所以我试图将这个图像保存为实例变量并在我的视图中显示它。
问题是,这会导致我的视图出现invalid byte sequence in UTF-8
错误。
# controller
@img = source_img.resize(200, 200).to_string
#view
<img src="data:image/png;base64,<%= @img %>" />
用raise @img.to_yaml
调试@img变量输出正确的字符串,例如:
--- !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标记中会正确显示图像。
这里有什么想法吗?直接显示此图像而不保存的其他想法?
提前谢谢!如果有什么不清楚,请发表评论。答案 0 :(得分:9)
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。
答案 1 :(得分:4)
@wvanbergen的方式给了我一些错误,但我改变了一点,但它确实有效。
#controller
@png = qr.to_img.resize(250,250).to_data_url
#view
<%= image_tag @png %>