From: Mike Meng Date: 2006-09-17T12:31:05+09:00 Subject: Re: RMagick problem Thanks to Paul and Timothy. I've found the problem. I made a stupid mistake when open the URI of an image file without "b" flag. With "b" flag, everything is ok. Thanks again. Mike Timothy Hunter 写道: > 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?