From: Timothy Hunter Date: 2006-09-17T01:21:57+09:00 Subject: Re: RMagick problem: Image::read works well but Image::from_blob fails Mike Meng wrote: > Hi all, > I want to determine the geometry of an image. The image file may be > in local harddisk or on web. So I use open-uri and > Magick::Image::from_blob to do that work, here is the code: > > open('') { |f| > image = Magick::Image::from_blob(f.read).first > puts "Width: #{image.columns}; Height: #{image.rows}" > } > > For most of the cases, this works well. However, we I tried to read an > JPEG generated by my Ricoh Caplio digital camera, it failed and emitted > these message: > > ---------- code ---------- > E:/workspace/ruby/idapted/testrmg.rb:6:in `from_blob': JPEG datastream > contains > no image `' (Magick::ImageMagickError) > .... > ----------------------------- > > Surprisingly enough, if I use Magick::Image::read method to read the > same image file directly from harddisk, everything is fine, here is the > code: > ---------- code ---------- > g = Magick::Image::read('').first > puts "Width: #{g.columns}; Height: #{g.rows}" > ----------------------------- > > Why do Image::read and Image::from_blob make differeces? How to > determine the geometry of a remote image? > > Any comment is appreciated. Thanks! > > > Under the covers, #read and #from_blob share most of their code. If Image.read can read the file then Image.from_blob can handle it, too. The argument to Image.from_blob must be a string containing the entire image. I'm guessing that the argument you're giving it is only part of the image. Assign f.read to a variable and display its length. Is it the same as the size of the image file on disk?