cómo? manipular imagen después de subirla

81 views
Skip to first unread message

nicolás rosbaco

unread,
Feb 9, 2012, 5:16:26 PM2/9/12
to web2py-...@googlegroups.com
HOla necesitaría manipular la imágen que sube el usuario al registrarse (un avatar de usuario)

Por manipularla me refiero a escalarla si hiciera falta (de acuerdo a las dimensiones....). ¿Se puede evaluar la resolución de la imágen?? a veces imágenes de dimensiones razonables están en una resolución muy alta y pesan por ello

Este tema me genera una serie de imposibilidades:

1) interrumipr la acción de registro, que me es ajena (quiero decir, utilizo el default/user/register). Es decir: no solo debo interrupir el envio del formulario (que no se como hacerlo) sino que además de un formulario que no presento yo

2) imagino hay una librería para modificar imágenes... no se cuál sería, pero además necesitaría saber como anexarla a web2py....

Bueno no es poco lo que falta acá.... quedo a la escucha de las sugerencias....

(gracias... son muchas preguntas en muy poco tiempo, gracias)



--
"En un país colonial las oligarquías son las dueñas de los diccionarios" (John William Cooke)

Alvaro Lizama Molina

unread,
Feb 9, 2012, 5:17:59 PM2/9/12
to web2py-...@googlegroups.com
Con PIL y la manejas como cualquier otra libreria de python, despues de subir la imagen en el proceso de registro haces lo que tengas que hacer con PIL y ya.
--
Alvaro Lizama Molina  - http://alvarolizama.net

nicolás rosbaco

unread,
Feb 9, 2012, 5:20:14 PM2/9/12
to web2py-...@googlegroups.com
ok. gracias por tan pronta respuesta.

Voy a mirar PIL a ver que se hace.

Lo que no imagino es como hago para ANTES de insertar el registro pasarla por la función que la manipule (si es necesario)

de nuevo gracias

Alvaro Lizama Molina

unread,
Feb 9, 2012, 5:25:33 PM2/9/12
to web2py-...@googlegroups.com
Y por que ante de editar el registro? 

nicolás rosbaco

unread,
Feb 9, 2012, 5:35:24 PM2/9/12
to web2py-...@googlegroups.com
mmmm no se, pero se me ocurre hacerlo al momento del registro, sino debería recorrer la tabla buscando imagen por image para escalarla...

Me explico un poco mejor: la tabla auth_user tiene un campo avatar, es la imagen del usuario. Como para estandarizar un poco la presentación y optimizar el funcionamiento del sitio (hay imágenes imágenes muy pesadas) es que quiero achicar las imágenes cuando corresponda.

La alternativa que imagine es restringir la subida... pero no veo mucho nadador con ganas de manipular fotos digitalmente...

Entonces: quiero que "antes" de que se inserte un registro en la tabla, la imagen sea evaluada y optimizada si corresponde... no se me ocurre otra, escucho sugerencias... casi casi que pagaría por ellas ;-)

Otro tema con PIL: veo en el archivo readme que tiene que ser instalado (python setup.py install).. las preguntas:

¿en que sub-carpeta de web2py debo hacerlo?
¿me podes pasar algún ejemplo en uso, preferentemente sobre web2py?


Bueno mil gracias

Alvaro Lizama Molina

unread,
Feb 9, 2012, 5:38:26 PM2/9/12
to web2py-...@googlegroups.com
instalo en tu virtual env .. asi se debe trabajar en python. Y puedes hacer un validador para eso entonces.

nicolás rosbaco

unread,
Feb 9, 2012, 5:50:04 PM2/9/12
to web2py-...@googlegroups.com
che perdón por tanta pregunta rara....

te cuento:

1) no se a que te referís con virtual env.... te agradecería explayes un poco ahí

2) una buena noticia (creo): acabo de probar en el server que uso (via ssh), es alwaysdata, y funcionó import Image... es decir está disponible en el server... la pregunta: ¿con eso debería funcionar con el web2py que tengo en marcha no?


sigo escuchando..

gracias

Alvaro Lizama Molina

unread,
Feb 9, 2012, 5:52:05 PM2/9/12
to web2py-...@googlegroups.com
http://pypi.python.org/pypi/virtualenv

Y lo trabajas normal importas el modulo y lo trabajas segun la documentación.

nicolás rosbaco

unread,
Feb 9, 2012, 6:03:48 PM2/9/12
to web2py-...@googlegroups.com
geniallll.... lo estoy probando en web2py y la librería la importó genial

tengo (en principio) este problema: la imágen no la puedo cargar desde un archivo... sino que la descargo desde la tabla (es un campo blob).

El modo que ví de instanciar el objeto Image es Image.open(nombreArchivo)....

¿cómo lo resuelvo?

Alvaro Lizama Molina

unread,
Feb 9, 2012, 6:10:52 PM2/9/12
to web2py-...@googlegroups.com
 *Para empezar almacenar imágenes en la DB no es buena practica* y tendrias que sacarla de su campo y meterla en un objeto stringio y leerlo normal con el PIL.

nicolás rosbaco

unread,
Feb 9, 2012, 6:19:39 PM2/9/12
to web2py-...@googlegroups.com
hola.... pasa algo llamativo, al menos para mi:

hago esto:
    yo = db(db.auth_user.id==1).select().first()
    foto = yo.avatar
   

me imaginaba que foto contiene la "cadena foto"... es decir todo el código de la imagen.... pero no. es una cadena así: auth_user.avatar.86ee984c808fab23.6176617461724c61426f63612e6a7067.jpg

encontré el archivo con ese nombre en la carpeta uploads dentro de web2py....

ahora me faltaría referenciar esa dirección....

creyendo que al momento de ejecutar el controlador estoy en la carpeta controllers/ intente con esta cadena:
    yo = db(db.auth_user.id==1).select().first()
    foto = yo.avatar
    nico = '../uploads/'+foto (**1)
##    raise HTTP(200, nico)
   
    imagen = Image.open(nico)
    imagen.show()

(**1) ../uploads/auth_user.avatar.86ee984c808fab23.6176617461724c61426f63612e6a7067.jpg

pero me dice que la ruta no existe.... debería ver de alcanzar la carpeta uploads en el controlador.... ¿se te ocurre como?


otra vez: muchas gracias

nicolás rosbaco

unread,
Feb 9, 2012, 6:31:12 PM2/9/12
to web2py-...@googlegroups.com
resuelto el primer paso:
ACCEDER A UNA FOTO DE LA TABLA Y MOSTRARLA


    yo = db(db.auth_user.id==1).select().first()
    foto = yo.avatar
    nico = request.folder+'uploads/'+foto   
    imagen = Image.open(nico)
    imagen.show()

con esto accedo a la imagen, me falta interrumpir el registro... pero abro otro hilo


mil gracias por todo che!!!! mil^3

Alvaro Lizama Molina

unread,
Feb 9, 2012, 6:33:44 PM2/9/12
to web2py-...@googlegroups.com
No necesitas interrumpirlo puedes crear un validador para  que al subir la imagen "haga algo" y luego se registre.

nicolás rosbaco

unread,
Feb 9, 2012, 6:46:30 PM2/9/12
to web2py-...@googlegroups.com
ok. validadores personalizados ¿?...

lo voy a mirar... ahí me gusto

gracias miles

Martín Mulone

unread,
Feb 10, 2012, 5:56:26 AM2/10/12
to web2py-...@googlegroups.com

Martín Mulone

unread,
Feb 10, 2012, 6:00:54 AM2/10/12
to web2py-...@googlegroups.com
La mejor forma es almacenar la image en static, ya que en static después el navegador y el server la pueden cachear, claro que la imagen está disponible para todos.

Field('thumb', 'upload', default="", label=T('Thumb'),
                  autodelete=True,
                  writable=False, readable=False, uploadseparate=True,
                  uploadfolder=URL('static','myfolderupload')),

nicolás rosbaco

unread,
Feb 10, 2012, 7:49:59 AM2/10/12
to web2py-...@googlegroups.com
muy interesante. Porque justamente tenía problemas para visualizar en la view la imágen que estoy tratando, por ahí podría usar una subcarpeta de static.... sigue valiendo eso de cacheo del navegador???


muchas gracias
Reply all
Reply to author
Forward
0 new messages