RMagick не может прочитать удаленное изображение - PullRequest
12 голосов
/ 01 сентября 2011

Мой 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]

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

     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"

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

Ответы [ 4 ]

45 голосов
/ 02 октября 2011

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 
6 голосов
/ 26 мая 2014

Перенесемся в май 2014, и я смогу просто ...

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

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

(протестировано на ImageMagick 6.8.8-9 Q16)

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

4 голосов
/ 01 сентября 2011

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

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

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

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

2 голосов
/ 23 февраля 2015

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

Rmagick.

Пример:

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...