RMagick problem: Image::read works well but Image::from_blob fails

M

Mike Meng

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('<path or URI of image file>') { |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('<local file only>').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!
 
T

Timothy Hunter

Mike said:
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('<path or URI of image file>') { |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('<local file only>').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?
 
M

Mike Meng

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 写é“:
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,055
Latest member
SlimSparkKetoACVReview

Latest Threads

Top