RMagick 无法读取远程图像
我的环境是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"
有人能给我一些线索吗?先感谢您。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
Magick::Image.read
不支持 URL 链接。但是您可以使用 rubyopen
方法读取远程图像:Magick::Image.read
does not support URL links. But you can read the remote image using rubyopen
method:快进到 2014 年 5 月,我能够……
而且它确实有效。感觉很好。
(在 ImageMagick 6.8.8-9 Q16 上测试)
编辑:但似乎在 Heroku Cedar 堆栈上不起作用(ImageMagick 6.5.7-8 2012-08-17 Q16)。 :/
Fast forward to May 2014, and I'm able to just...
And it just works. Feels good.
(Tested on ImageMagick 6.8.8-9 Q16)
EDIT: Does not seem work on Heroku Cedar stack (ImageMagick 6.5.7-8 2012-08-17 Q16) though. :/
据我所知
Magick::Image.read
不支持 URL,仅支持文件/文件句柄 - 请参阅 http://www.imagemagick.org/RMagick/doc/image1.html#read 其中说它由不支持 URL 的 C 函数
ReadImage
实现 - 请参阅第 394 行的 ImageMagick 源代码 此处。如果您想从 URL 打开图像,您需要以某种方式下载图像 - 到文件或流...然后您可以将该文件或流提供给
Magick...
As far as I can see
Magick::Image.read
does NOT support URLs, only files/file handles - see http://www.imagemagick.org/RMagick/doc/image1.html#read where it says that itIt is implemented by the C function
ReadImage
which does not support URLs - see the ImageMagick source at line 394 here.IF you want to open an image from a URL you need to download the image somehow - to a file or a stream... then you can feed that file or stream to
Magick...
您可以使用
open-uri
从 url 读取文件,然后将其输入到 Rmagick 的Image::from_blob
中。示例:
请注意,您还应该注意处理
open
HTTP 请求引起的异常。即,如果您收到 404 或非图像响应,会发生什么情况?You can read a file from a url with
open-uri
, then feed that into Rmagick'sImage::from_blob
.Example:
Note that you should additionally take care to handle exceptions arising from the
open
HTTP request. Ie, what happens if you get a 404, or a non-image response?从
rmagick (4.1.2)
开始,Image.read
支持 URL 链接。就我而言,我正在读取图像,特别是来自 AWS S3 的png
文件。这是通过本地主机。更新到最新版本应该可以解决此问题。As of
rmagick (4.1.2)
,Image.read
does support URL links. In my case, I was reading an image, specifically apng
file from AWS S3. This was via localhost. Updating to the latest version should fix this problem.