2012-01-05 6 views
6

그래서 chunky_png을 사용하여 PNG 이미지를 만들었습니다. 이 이미지를 저장하고 싶지 않습니다. 왜냐하면이 요청에 대해서만 유용하기 때문에이 이미지를 인스턴스 변수로 저장하고 내보기에 표시하려고합니다.chunkypng로 직접 만든 이미지를 표시합니다 (저장하지 않음)

문제는 내보기에 invalid byte sequence in UTF-8 오류가 발생한다는 것입니다.

내가 무슨 짓을했는지 :

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

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

제대로 img 태그에 수동으로 이미지를이 문자열을 표시합니다 copiing 나 올바른 문자열, 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 출력으로 @img 변수를 디버깅.

아이디어가 잘못 되었나요? 저장하지 않고이 이미지를 직접 표시하는 다른 아이디어?

미리 감사드립니다. 뭔가 명확하지 않은 경우 의견을 남겨주십시오.

+0

src attr에 to_yaml을 추가 했습니까? – Yule

+0

@Yule'.to_yaml'은 내 응용 프로그램을 충돌시키지 않지만 물론 yaml 형식 때문에 이미지가 표시되지 않습니다. – choise

+0

해킹 비트가 있지만 .to_yaml.to_s는 어떨까요? – Yule

답변

8

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의 최신 버전을 사용하고 있는지 확인합니다.

+0

레일은 데이터 문자열로 이미지를 표시하는 도우미 방법을 제공합니까? – choise

3

@wvanbergen 방식을 사용하면 오류가 발생했지만 조금 변경되어 작동했습니다.

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

    #view 
    <%= image_tag @png %> 
관련 문제