[Python-es] Crop + Thumbnail

Guillermo Moguel guillom4 en gmail.com
Vie Sep 2 18:23:01 CEST 2011


Hola Hubermann, efectivamente, para poder saber donde se encuentra tu
imagen necesitaras consultarlo de tu modelo, en mi caso realizo una
operación como la que tu requieres, el cambio es que yo no modifico la
imagen original y únicamente modifico la imagen que me están
consultando y regreso la nueva imagen. Esto me ha funcionado
correctamente por que el flujo de la aplicación no en tan grande así
que me va bien.

Otro dato es que como la imagen no es accesible desde url (esto fue
pensado así), las fotos en este caso son tratadas y regresadas para
incrustar en un img de mi template.
<img src="data:image/jpg;base64,{{ photo }}" alt="Base64 encoded image" />


Y con poco de miedo de faltar a la culturilla pythónica.

def foto64(fichero, mini=False):
    try :
      import base64
      archivo = StringIO()
      imagen = Image.open(fichero, "r") #el fichero seria la ruta de
tu consulta del modelo
      x,y = imagen.size
      rel = round(Decimal(x)/Decimal(y), 2)

      if rel >= 1.33:
        recorte = [((x/2)-(y*5/12)),0,((x/2)+(y*5/12)),y]
        imagen = imagen.crop(recorte)

     if mini: #Esto lo uso para aun auto completado en un texbox, que
regresa la foto con nombres
        imagen.thumbnail((30, 34), Image.ANTIALIAS)
     else:
        imagen.thumbnail((294, 391), Image.ANTIALIAS)

    imagen.save(archivo, 'JPEG')
    return base64.b64encode(archivo.getvalue())

except:
    imagen = "" #aqui tendrias una cadena de alguna imagen que quieras
regresar si tienes un error
    return imagen

Saludos

El día 1 de septiembre de 2011 12:04, Hubermann <hubermann en gmail.com> escribió:
> Hola guillermo, gracias por la respuesta, ahora el tema es que soy sumamente novato en esto de django
> (programo en php)
>
> como deberia hacer para saber cual es la imagen subida y darle las opciones de crop para el thumbnail, resize y luego eliminar la original?  eso tengo q hacerlo en el modelo?
>
> puedo hacer una funcion aparte y pasarle los parametros que quiero?
>
> por ejemplo:
>
> from mi_funcion_para_imagenes import crop_imagen, resize_imagen
>
>
> ultima = mi-imagen-recien-subida
> ultima.crop_imagen(150px, cuadrado) //opciones de cuadrado o normal para cortar proporcionalmente
> ultima.resize_imagen(700px) //llevar la imagen a un ancho maximo de 700px y luego eliminar la original
>
>
> Gracias por responder, saludos desde Baires
>
>
>
> On Sep 1, 2011, at 12:06 AM, Guillermo Moguel wrote:
>
>> Puedes usar la librería de PIL con eso haces eso, yo la uso también
>> con django y tengo esto para recortar la parte central mas o menos en
>> una proporción de foto infantil
>>
>> from PIL import Image
>>
>> foto = Image.open(fichero)
>> x = foto.size[0]
>> y = foto.size[1]
>> rel = round(Decimal(x)/Decimal(y), 2)
>>
>> if rel >= 1.33:
>>    recorte = [((x/2)-(y*5/12)),0,((x/2)+(y*5/12)),y
>>    foto = foto.crop(recorte)
>>
>> return  foto
>>
>>
>>
>> Espero te sirva.
>> Saludos de Chiapas.
>>
>> El día 31 de agosto de 2011 21:21, Hubermann <hubermann en gmail.com> escribió:
>>> Hola
>>>
>>> quisiera saber que se usa en python para la tarea hacer crop y generar un thumbnail en Django.
>>>
>>> encontre un plugin thumbs.py pero solo hace thumbnail y lo hace cuadrado. (quisiera darle un ancho y el alto q sea proporcional)
>>>
>>> tambien encontre photologue pero me parece demasido grande para lo que necesito hacer y poca info de como utilizarlo
>>>
>>> Salu2
>>> _______________________________________________
>>> Python-es mailing list
>>> Python-es en python.org
>>> http://mail.python.org/mailman/listinfo/python-es
>>> FAQ: http://python-es-faq.wikidot.com/
>>>
>>
>>
>>
>> --
>> Guillermo Moguel Mandujano
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> http://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>



-- 
Guillermo Moguel Mandujano


Más información sobre la lista de distribución Python-es