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 или не изображение?