RMagick can not read remote image
You can read a file from a url with open-uri
, then feed that into Rmagick's Image::from_blob
.
Example:
require 'open-uri'
require 'rubygems'
require 'Rmagick'
image_url = 'http://example.com/image.jpg'
image = Magick::Image.from_blob(open(image_url).read).first
Note that you should additionally take care to handle exceptions arising from the open
HTTP request. Ie, what happens if you get a 404, or a non-image response?
Fast forward to May 2014, and I'm able to just...
require 'rubygems'
require 'RMagick'
include Magick
image = ImageList.new("http://www.jewelinfo4u.com/images/Gallery/ruby.jpg")
And it just works. Feels good.
(Tested on ImageMagick 6.8.8-9 Q16)
EDIT: Does not seem work on Heroku Cedar stack (ImageMagick 6.5.7-8 2012-08-17 Q16) though. :/
As far as I can see Magick::Image.read
does NOT support URLs, only files/file handles - see http://www.imagemagick.org/RMagick/doc/image1.html#read where it says that it
Reads all the images from the specified file.
It is implemented by the C function ReadImage
which does not support URLs - see the ImageMagick source at line 394 here.
IF you want to open an image from a URL you need to download the image somehow - to a file or a stream... then you can feed that file or stream to Magick...
Magick::Image.read
does not support URL links. But you can read the remote image using ruby open
method:
require 'rubygems'
require 'RMagick'
require "open-uri"
image = Magick::ImageList.new
urlimage = open("http://www.jewelinfo4u.com/images/Gallery/ruby.jpg") # Image Remote URL
image.from_blob(urlimage.read)
# crop = image.crop(10,10,200,300) You can crop this image too
# crop.write('C:/nameofyourNewImage.jpg') If you want to save the image you can use this line in windows