Ver Mensaje Individual
  #1 (permalink)  
Antiguo 31/08/2011, 16:37
laexpo
 
Fecha de Ingreso: mayo-2011
Mensajes: 22
Antigüedad: 12 años, 11 meses
Puntos: 1
Form para crear miniaturas o thumbnails en un directorio paralelo

Hola a todos!

Primero que nada, no soy un experto en Python ni nada por el estilo -así que espero hacerme entender- pero tengo un sitio sobre Django, y necesito generar una función en uno de los formulario para generar la acción que paso a detallar:

En uno de los formularios que tenemos, creamos fichas con imágenes en tamaño ampliación, las cuales guarda en la base regularmente. Lo que necesito es que cuando se sube la imagen, además de guardarla en un directorio determinado, cree una miniatura paralela y la guarde en una carpeta determinada, para utilizar el thumbnail en los diversos listados y no tener que meterle css y java a las ampliación para ser achicadas, puesto que genera demoras innecesarias.

Alguien tiene algún código ya determinado para generar dicha función aplicando variables de ancho, alto y peso?? Les copio el código del upload de imgs en el objeto fichas.

Código Python:
Ver original
  1. class FichaForm(forms.ModelForm):
  2.  
  3.     def _clean_imagen_field(self, attrname, check_max=True, check_min=False):
  4.         imagen = self.cleaned_data[attrname]
  5.         if imagen is None:
  6.             return None
  7.                
  8.         if imagen.size > 2097152:
  9.             raise forms.ValidationError(u"La imagen debe ser menor de 2MB.")        
  10.  
  11.         img = Image.open(StringIO(imagen.read()))
  12.         img.load()
  13.        
  14.         x, y = img.size
  15.  
  16.         if check_min and (x < 100 or y < 100):
  17.             raise forms.ValidationError((u"La imagen es de %d x %d."
  18.                                          u" Tamañan mínimo 100 x 100") % (x, y))
  19.  
  20.         if check_max and (x > 2000 or y > 2000):
  21.             raise forms.ValidationError((u"La imagen es de %d x %d."
  22.                                          u" Tamañan máximo 2000 x 2000") % (x, y))
  23.  
  24.         return imagen      
  25.  
  26.     def clean_imagen(self):
  27.         attrname = 'imagen'
  28.         if not attrname in self.cleaned_data:
  29.             raise forms.ValidationError(u"La imagen es requerida")
  30.         return self._clean_imagen_field(attrname, check_min=True)
  31.  
  32.     def clean_imagen1(self):
  33.         attrname = 'imagen1'      
  34.         if not attrname in self.cleaned_data:
  35.             return None
  36.  
  37.         return self._clean_imagen_field(attrname)
  38.    
  39.     def clean_imagen2(self):
  40.         attrname = 'imagen2'
  41.         if not attrname in self.cleaned_data:
  42.             return None
  43.  
  44.         return self._clean_imagen_field(attrname)
  45.  
  46.     def clean_imagen3(self):
  47.         attrname = 'imagen3'
  48.         if not attrname in self.cleaned_data:
  49.             return None
  50.  
  51.         return self._clean_imagen_field(attrname)
  52.  
  53.     class Meta:
  54.         model = Ficha

Saludos.