Problema con manejo de imagenes

Saludos amigos, he creado una clase, para redimensionar una imagen de
acuerdo a un criterio(ancho y alto), al metodo de esta clase le paso el
valor proveniente de un campo file del formulario, el codigo es algo
asi:

#modelo
#aqui estoy recogiendo el contenido del campo file y pasandolo al metodo
de
la clase
def img_reducida=(imagen)
Herramientas.redimensiona(80,100,imagen,“public/images/productos/reducidas/”)
end

#my clase
#aca proceso el archivo, extraigo su ancho y alto, etc
#pero el problema aparentemente es porque el contenido del file se
pierde y
llega como nil hasta aqui.
class Herramientas
include Reloadable
require ‘RMagick’
def self.redimensiona(max_ancho,max_alto,image,destino)
File.open(“public/images/tmpro#{imagen.original_filename}”, “wb”) {
|f|
f.write(imagen.read) }
img=Magick::Image.ping(imagen)
@ruta=imagen
ancho=img[0].columns
alto=img[0].rows

end

end

#y entonces me lanza este error
You have a nil object when you didn’t expect it!
The error occured while evaluating nil.columns

No entiendo porque el contenido del file se pierde, tal vez sea por lo
que
es temporal, al menos asi era en php, como podria pasar el contenido de
esta
archivo al metodo de la clase?, ojala me orienten puedan ya que llevo
con
esto mas de un dia :(.

Gracias.


Grandes éxitos, superhéroes, imitaciones, cine y TV…
http://es.msn.kiwee.com/ Lo mejor para tu móvil.

http://technoweenie.stikipad.com/plugins/show/Acts+as+Attachment

Hola,

En primer lugar veo algo obvio, que es probablemente un error de
cut&paste, es que el parámetro en redimensiona lo has llamado “image”
pero dentro del método lo usas como “imageN”

por otro lado, no me parece a priori que suceda como dices que te pierde
el contenido del fichero, ya que la primera parte del método se ejecuta
y no te da un error hasta intentar acceder a img[0].columns. Es decir,
que el Image.ping te está devolviendo un nil. Hasta donde sé, Image.ping
trabaja o con un path o con un fichero abierto. No sé si el formato en
el que recoges la imagen se puede tratar directamente como fichero. En
caso de que lo que tengas en memoria sea un blob, puede que te sea útil
el método Image.from_blob o Image.read_inline si está en base64

en cualquier caso, con RMagick cambiar las dimensiones de una imagen es
más simple que lo que has puesto (a no ser que haya más código que no
has enviado y que estés haciendo más cosas)

img=ImageList.read (path)
img.resize!(nuevasdimensiones o factor de conversion)
img.write(path)

como bola extra, si en el path de destino le cambias la extension (o si
le pones un prefijo que indique la extensión) te lo convierte al formato
deseado.

suerte,

j

Muchas gracias Javier R., no me habia percatado de eso, tenia que
leer la imagen mediante “image.local_path”.

Saludos.