RMagick не может читать удаленное изображение

Мой env - это Linux centos, и используйте ruby ​​1.8.7, а код здесь ниже:

require 'rubygems'
require 'RMagick'
Magick::Image.read("http://image.domain.com/image.darenhui.com/images/random_bg/01.jpg")[0]

он выдает ошибку, как показано ниже:

in `read': no decode delegate for this image format `//image.domain.com/images/random_bg/01.jpg' @ error/constitute.c/ReadImage/532 (Magick::ImageMagickError), 

но если я читаю локально, как:

    require 'rubygems'
    require 'RMagick'
    Magick::Image.read("/local/staticimages/random_bg/01.jpg")[0]

все в порядке. Я запускаю идентификатор-списка и смотрю ниже:

     JPEG* JPEG      rw-   Joint Photographic Experts Group JFIF format (62)
     JPG* JPEG      rw-   Joint Photographic Experts Group JFIF format (62)

но когда я проверяю идентификатор для "http://image.domain.com/image.darenhui.com/images/random_bg/01.jpg", чтобы сбой, но успех для "/local/staticimages/random_bg/01.jpg"

Может кто-нибудь подскажет мне? заранее спасибо.

Ответ 1

Насколько я вижу, Magick::Image.read НЕ поддерживает URL-адреса, только файлы/файлы - см. http://www.imagemagick.org/RMagick/doc/image1.html#read, где говорится, что он

Считывает все изображения из указанного файла.

Он реализуется функцией C ReadImage, которая не поддерживает URL-адреса - см. источник ImageMagick на строке 394 здесь.

Если вы хотите открыть изображение с URL-адреса, вам нужно как-то загрузить изображение - в файл или поток... тогда вы можете передать этот файл или поток в Magick...

Ответ 2

Magick::Image.read не поддерживает ссылки на URL. Но вы можете прочитать удаленное изображение с помощью метода ruby ​​ open:

 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 

Ответ 3

Ускорьтесь до мая 2014 года, и я могу просто...

require 'rubygems'
require 'RMagick'
include Magick
image = ImageList.new("http://www.jewelinfo4u.com/images/Gallery/ruby.jpg")

И это просто работает. Приятно.

(Проверено на ImageMagick 6.8.8-9 Q16)

РЕДАКТИРОВАТЬ: Кажется, не работает на стеке Керока Героку (ImageMagick 6.5.7-8 2012-08-17 Q16).:/

Ответ 4

Вы можете прочитать файл с URL-адресом open-uri, а затем подать его в Rmagick Image::from_blob.

Пример:

require 'open-uri'
require 'rubygems'
require 'Rmagick'

image_url = 'http://example.com/image.jpg'

image = Magick::Image.from_blob(open(image_url).read).first

Обратите внимание, что вам следует дополнительно обработать исключения, связанные с HTTP-запросом open. Т.е., что произойдет, если вы получите сообщение 404 или не изображение?