creo que esto es algo que probablemente será mejor fuera de la escritura a sí mismo, ya que depende de cómo son sus datos y modelos planteado, si (y dónde) quiere guardar los cultivos, si desea conservar los originales, etc. Incluso si tiene una gran aplicación, probablemente pasará más tiempo tratando de doblar otro código para hacer lo que necesita en su situación.
(Este código es muy áspero - Estoy trazar los pasos realmente)
Si usted tiene un modelo con un ImageField, se podría añadir un segundo campo de imagen para mantener la imagen recortada:
class MyModel(models.Model):
image = models.ImageField(...)
image_crop = models.ImageField(...)
y un formulario con un campo adicional para contener las coordenadas jcrop que se completarán en el formulario en el lado del cliente (el campo estará oculto). En qué forma guarda las coordenadas en el campo depende de usted, pero podría ser una idea usar un diccionario json (json.js en el lado del cliente y simplejson en el lado del servidor), algo como:
{ 'x1' : '145', 'y1' : '200' ... }
la forma:
class MyModelForm(form.ModelForm):
""" Hide a field to hold the coordinates chosen by the user """
crop_coords = forms.CharField(attrs={'style':'display:none'})
class Meta:
model = MyModel
una vista que procesa todo esto:
def some_view(request):
form = request.POST
if form.is_valid():
crop_coords = form.cleaned_data['crop_coords']
# decode the coords using simpleson (or however you passed them)
...
# create a cropped image
original_image = form.cleaned_data['image']
cropped_image = cropper(original_image.path, crop_coords)
...
# save it back to the db - http://stackoverflow.com/questions/1308386/programmatically-saving-image-to-django-imagefield
...
y una función para crear la imagen recortada usando PIL:
# Look here: http://djangosnippets.org/snippets/224/
def cropper(original_image_path, crop_coords):
""" Open original, create and return a new cropped image
...
Con respecto a django-image-cropping: Si mira ImageCropField (https://github.com/jonasundderwolf/django-image-cropping/blob/master/image_cropping/fields.py) notará que básicamente toma el campo de imagen estándar y solo agrega el widget para el administrador. Y ImageRatioField almacena las coordenadas como cadenas separadas por comas, por lo que no es muy diferente de la sugerencia de pastylegs. Por lo tanto, debería poder redeclarar fácilmente un campo de imagen estándar en una aplicación existente como ImageCropField. ¿O cuáles son sus preocupaciones ("muy acoplado")? – arie