2011-09-01 33 views
11

env của tôi là centos Linux, và sử dụng ruby ​​1.8.7, và mã là ở đây dưới đây:RMagick không thể đọc được hình ảnh từ xa

require 'rubygems' 
require 'RMagick' 
Magick::Image.read("http://image.domain.com/image.darenhui.com/images/random_bg/01.jpg")[0] 

nó throws lỗi như dưới đây:

in `read': no decode delegate for this image format `//image.domain.com/images/random_bg/01.jpg' @ error/constitute.c/ReadImage/532 (Magick::ImageMagickError), 

nhưng nếu tôi đọc từ địa phương như:

require 'rubygems' 
    require 'RMagick' 
    Magick::Image.read("/local/staticimages/random_bg/01.jpg")[0] 

mọi thứ đều ổn. tôi chạy xác định định dạng -list và xem dưới đây:

 JPEG* JPEG  rw- Joint Photographic Experts Group JFIF format (62) 
    JPG* JPEG  rw- Joint Photographic Experts Group JFIF format (62) 

nhưng khi tôi thử nghiệm bằng cách nhận dạng cho "http://image.domain.com/image.darenhui.com/images/random_bg/01.jpg" thất bại, nhưng sự thành công cho "/local/staticimages/random_bg/01.jpg"

ai đó có thể cho tôi một số đầu mối? cảm ơn bạn trước.

+0

những gì sẽ xảy ra nếu bạn sao chép và dán URL đó và nuôi nó để wget? – Yahia

+0

@Yahia cảm ơn bạn đã trả lời của bạn, tôi đã cố gắng http://image.domain.com/images/random_bg/06.jpg wget, nó là ok. – ywenbo

+0

xem câu trả lời của tôi bên dưới ... – Yahia

Trả lời

3

Theo như tôi có thể nhìn thấy Magick::Image.read KHÔNG hỗ trợ URL, chỉ file/tập tin xử lý - xem http://www.imagemagick.org/RMagick/doc/image1.html#read nơi nó nói rằng nó

Đọc tất cả các hình ảnh từ một file nào đó.

Nó được thực hiện bởi hàm C ReadImage không hỗ trợ URL - xem nguồn ImageMagick tại dòng 394 here.

NẾU bạn muốn mở một hình ảnh từ một URL mà bạn cần phải tải về các hình ảnh bằng cách nào đó - vào một tập tin hoặc một dòng suối ... sau đó bạn có thể ăn mà tập tin hoặc suối để Magick...

+1

Hình ảnh.đọc ngay bây giờ hỗ trợ đọc trực tiếp từ URL. –

43

Magick::Image.read không hỗ trợ URL liên kết. Nhưng bạn có thể đọc những hình ảnh từ xa sử dụng ruby ​​open phương pháp:

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

Nhanh chóng chuyển tiếp đến tháng năm 2014, và tôi có thể chỉ ...

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

Và nó chỉ hoạt động. Cảm thấy tốt.

(Thử nghiệm trên ImageMagick 6.8.8-9 Q16)

EDIT: Không có vẻ làm việc trên Heroku Cedar stack (ImageMagick 6.5.7-8 2012/08/17 Q16) mặc dù. :/

+0

Nếu bạn cần sử dụng Hình ảnh, hãy làm như trên và chỉ cần thực hiện một hình ảnh = image_list.cur_image và bạn tốt để đi – bobbdelsol

+0

Cũng không hoạt động nếu URL của bạn là HTTPS, như tôi vừa phát hiện ra. – TGPrankster

+0

nó cho tôi, @TGPrankster. Có thể họ đã khắc phục sự cố kể từ khi bạn đăng – CoupDeMistral

2

Bạn có thể đọc tệp từ url bằng open-uri, sau đó cấp dữ liệu đó vào số Image::from_blob của Rmagick.

Ví dụ:

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

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

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

Lưu ý rằng bạn bổ sung nên chăm sóc để xử lý ngoại lệ phát sinh từ yêu cầu open HTTP. Tức là, điều gì sẽ xảy ra nếu bạn nhận được 404 hoặc phản hồi không phải hình ảnh?

Các vấn đề liên quan