2014-06-15 3 views
1

내가 동적으로 BufferedImage를 작성하고 내가 지금처럼 템플릿에 이미지를 표시 할 수 있도록 Base64로 문자열로 인코딩하기 위해 노력하고있어 :인코딩의 BufferedImage (자바)

<img src="data:image/gif;base64, [base 65 string]> 

을 내가 BufferedImage를 가지고 변수 나는 시험을 디스크에 쓰기 시도하고 이미지가 성공적으로 기록됩니다있는 :

ImageIO.write(@img, "gif", Java::JavaIo::File.new(filename)) 

어떻게 내가 Base64로로 인코딩 할 수 있도록 (디스크에 기록하지 않고) @img 변수 바이트 문자열을 얻을 수 있습니다 그것을 내 템플릿에 표시 하시겠습니까?

답변

1

당신은 to_outputstream 방법으로 org.jruby.util.IOOutputStream에서 StringIO을 포장 할 수 있으며 그 쓰기, 다음 StringIO#string와 바이트를 얻을 :

sio = StringIO.new 
outputstream = sio.to_outputstream 

ImageIO.write(@img, "gif", outputstream) 

encoded = Base64.encode64(sio.string) 
+0

당신의 선생님, 신사 및 학자이다. 그래도 작동하도록하려면 인코딩 된 문자열에서 개행 문자를 제거해야했습니다. –

+1

@ MaticJurglič 테스트했을 때 제대로 작동하는 것처럼 보였습니다. 브라우저에 따라 다를 수 있습니다. ['strict_encode64'] (http://ruby-doc.org/stdlib-2.1.2/libdoc/base64/rdoc/Base64.html#method-i-strict_encode64)를 사용하여 개행하지 않고 Base 64로 인코딩 된 문자열을 생성 할 수 있습니다 이후에 그들을 박탈보다는. – matt