RMagick无法读取远程图像

时间:2011-09-01 00:10:25

标签: imagemagick 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]
一切都好。 我运行识别-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“

有人能给我一些线索吗?提前谢谢你。

5 个答案:

答案 0 :(得分:44)

Magick::Image.read不支持网址链接。但您可以使用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 

答案 1 :(得分: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 Cedar堆栈上工作(ImageMagick 6.5.7-8 2012-08-17 Q16)。 :/

答案 2 :(得分:4)

据我所知Magick::Image.read不支持网址,只支持文件/文件句柄 - 请参阅http://www.imagemagick.org/RMagick/doc/image1.html#read所在的位置

  

从指定文件中读取所有图像。

它由不支持网址的C函数ReadImage实现 - 请参阅第394行的here中的ImageMagick来源。

如果您想要从URL打开图像,您需要以某种方式下载图像 - 文件或流...然后您可以将该文件或流提供给Magick...

答案 3 :(得分:2)

您可以使用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

请注意,您还应注意处理open HTTP请求引起的异常。即,如果您获得404或非图像响应会发生什么?

答案 4 :(得分:0)

function getPropertyByString(object, propString) { let value = object; const props = propString.split('.'); for (let index = 0; index < props.length; index += 1) { if (props[index] === undefined) break; value = value[props[index]]; } return value; }; const object = { name: 'any_name', address: { number: 77, test: { name: 'test' } } } console.log(getPropertyByString(object, 'address.test.name')) // test 开始,rmagick (4.1.2)支持URL链接。就我而言,我正在从AWS S3中读取图像,特别是Image.read文件。这是通过本地主机。更新到最新版本应该可以解决此问题。