2011-09-01 86 views
11

我ENV就是Linux CentOS的,並且使用Ruby 1.8.7,而代碼是在這裏如下:RMagick無法讀取遠程圖像

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] 

一切都很好。 我跑識別-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」

有人可以給我一些線索嗎?先謝謝你。

+0

如果您複製並粘貼該網址並將其提供給wget,會發生什麼情況? – Yahia

+0

@Yahia謝謝你的回覆,我試過wget http://image.domain.com/images/random_bg/06.jpg,沒關係。 – ywenbo

+0

看到我的答案在下面... – Yahia

回答

3

至於我可以看到Magick::Image.read不支持的URL,僅將文件/文件句柄 - 看到http://www.imagemagick.org/RMagick/doc/image1.html#read它說,它

讀取所有從指定的文件中的圖像。

它是由C函數ReadImage不支持網址實現 - 見線394 here ImageMagick的源。

,如果你想打開需要從你以某種方式下載圖像URL的圖像 - 到文件或流...那麼你可以喂那個文件或流Magick...

+1

圖片。現在讀取支持直接從URL讀取。 –

43

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

快進到2014年5月,我能夠只是......

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

,它就可以工作。感覺不錯。

(測試的ImageMagick 6.8.8-9 Q16)

編輯:似乎工作並不在Heroku上雪松堆棧(ImageMagick的6.5.7-8 2012年8月17日Q16)雖然。 :/

+0

如果您需要使用Image,然後執行上述操作,只需執行image = image_list.cur_image即可。 – bobbdelsol

+0

如果您的URL是HTTPS,就像我剛剛發現的那樣,也不起作用。 – TGPrankster

+0

它對我來說是@TGPrankster。他們可能會在您發佈後解決問題 – CoupDeMistral

2

您可以從open-uri的URL中讀取文件,然後將其提供給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 

請注意,您應該額外小心處理來自open HTTP請求中出現的異常。也就是說,如果你得到404或非圖像響應會發生什麼?