Forum: Ruby Writing encoded images to a file

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Aaron W. (Guest)
on 2006-06-04 16:24
Word 2003 supports an xml output for documents that uses Base64 to
encode the embedded images.  Im looking to grab that image out of the
xml and write it to a file.  Im able to parse the xml and isolate the
Base64 string but decoding it out to a file hasn't been working for me;
the image doesn't come back looking correct.  Stripped down version of
the code assuming 'AaBaCc' represents the really long Base64 encoded GIF
image string:


 require 'base64'
 str = 'AaBbCc'
 file = File.new("/test.gif", "w")
 file.syswrite(Base64.decode64(str))


Could be the string coming in, but wanted to get an idea if Im headed in
the right direction with the output before I tackle that debug
nightmare.
Ross B. (Guest)
on 2006-06-04 16:34
(Received via mailing list)
On Sun, 2006-06-04 at 21:25 +0900, Aaron Worsham wrote:
>  str = 'AaBbCc'
>  file = File.new("/test.gif", "w")
>  file.syswrite(Base64.decode64(str))

Assuming you're on Windows, you'll probably want "wb" rather than just
"w" for the file mode. Also, I'd do this:

File.open("/test.gif", "wb") do |file|
  file << Base64.decode64(str)
end

to make sure the file gets closed.
Joey (Guest)
on 2006-06-04 16:34
(Received via mailing list)
You could try change:
 file = File.new("/test.gif", "w")
to
 file = File.new("/test.gif", "wb")
So that its in binary mode.

j`ey
http://www.eachmapinject.com

c,y=(r,p,s=%w(rock paper scissors))[rand 3];d={s,
{p,0,r,1},p,{r,1,s,0},r,{s,1,p,0}};until y=~/(#{r
}|#{s}|#{p})/;$><<"#{[r,s]*", "} #{["or",p]*" "}?
";y=gets.chomp;end;$><<"You:#{y}\nComp:#{c}\n";$>\
<<"You #{d[y][c]?(d[y][c]>0?"Win":"Lose"):"Draw"}\n"
Aaron W. (Guest)
on 2006-06-04 17:00
Ross B. wrote:
> On Sun, 2006-06-04 at 21:25 +0900, Aaron Worsham wrote:
>>  str = 'AaBbCc'
>>  file = File.new("/test.gif", "w")
>>  file.syswrite(Base64.decode64(str))
>
> Assuming you're on Windows, you'll probably want "wb" rather than just
> "w" for the file mode. Also, I'd do this:
>
> File.open("/test.gif", "wb") do |file|
>   file << Base64.decode64(str)
> end
>
> to make sure the file gets closed.

That worked.  Thank you very much.
This topic is locked and can not be replied to.