2011-09-01 16 views
11

Mi env es CentOS Linux, y el uso de rubí 1.8.7, y el código es aquí abajo:RMagick no puede leer la imagen remota

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

arroja error como a continuación:

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

pero si leo de local como:

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

todo está bien. corro identificar el formato del -lista y ver a continuación:

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

pero cuando pruebo por la identidad de "http://image.domain.com/image.darenhui.com/images/random_bg/01.jpg" fallar, pero el éxito de "/local/staticimages/random_bg/01.jpg"

¿Alguien puede darme alguna pista? gracias de antemano.

+0

¿Qué sucede si copia y pega esa URL y la alimenta a wget? – Yahia

+0

@Yahia gracias por su respuesta, probé wget http://image.domain.com/images/random_bg/06.jpg, está bien. – ywenbo

+0

ver mi respuesta a continuación ... – Yahia

Respuesta

3

Por lo que yo puedo ver Magick::Image.read no soporta URLs, sólo los archivos/archivo maneja - ver http://www.imagemagick.org/RMagick/doc/image1.html#read donde dice que

Lee todas las imágenes del archivo especificado.

se implementa por la función C ReadImage que no soporta URLs - ver la fuente ImageMagick en la línea 394 here.

SI desea abrir una imagen desde una URL es necesario descargar la imagen de alguna manera - a un archivo o una corriente ... entonces se puede alimentar a ese archivo o una secuencia de Magick...

+1

Imagen.leer ahora admite la lectura de URL directamente. –

43

Magick::Image.read no soporta URL campo de golf. Sin embargo, se puede leer la imagen remota usando rubí open método:

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

Un avance rápido hasta mayo de 2014, y yo soy capaz de simplemente ...

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

Y simplemente funciona. Se siente bien.

(Probado en ImageMagick 6.8.8-9 P16)

EDIT: no parece trabajo en la pila Heroku Cedar (ImageMagick 6.5.7-8 2012-08-17 P16) sin embargo. :/

+0

Si necesita utilizar Image, haga lo anterior y simplemente haga una imagen = image_list.cur_image y estará listo para ir a – bobbdelsol

+0

. Tampoco funciona si su URL es HTTPS, como acabo de descubrir. – TGPrankster

+0

lo hace por mí, @TGPrankster. Es posible que resolvieran el problema desde que publicaste – CoupDeMistral

2

Puede leer un archivo de una url con open-uri, luego alimentar en Rmagick's Image::from_blob.

Ejemplo:

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

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

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

en cuenta que debe, además, tener cuidado para manejar excepciones derivadas de la petición HTTP open. Es decir, ¿qué ocurre si obtienes una respuesta 404 o sin imagen?

Cuestiones relacionadas