2015-02-20 8 views
7

Devo dare all'amministratore la funzione di caricare un'immagine per un ImageField utilizzando AJAX e quindi ritagliare la porzione di sua scelta (con un predefinito rapporto dimensione o risoluzione) e quindi salvare l'immagine ritagliata nel database.Carica un'immagine con AJAX, ritaglia una porzione di nostra scelta e salva in django admin

Ho provato django-image-cropping e django-ajaximage per questo.

#Using django-image-cropping 
from image_cropping import ImageRatioField 
class Alumnus(models.Model): 
    photo = models.ImageField(null=True, blank=True) 
    cropped_photo = ImageRatioField('photo', '430x360') 


#Using django-ajaximage 
from ajaximage.fields import AjaxImageField 
class Alumnus(models.Model): 
    photo = AjaxImageField(
          upload_to='alumni_photos', 
          max_height=400, 
          max_width=400, 
          crop=True 
         ) 

Mentre django-ajaximage carica un'immagine utilizzando AJAX, ma non permette all'amministratore di scegliere quale parte dell'immagine che vuole essere ritagliata, django-image-cropping colture un'immagine in due passi: per prima cosa dobbiamo caricare un'immagine, salvarla nel db, quindi dobbiamo aprire di nuovo l'oggetto e selezionare la parte di ritaglio, e salvarlo nuovamente nel database, che ritengo inutilmente ingombrante. Eventuali suggerimenti?

+0

È necessario creare un widget personalizzato. Questo compito non è solo per Python. È necessario anche lo script java sul lato client. – EvilX

+0

Penso che dovresti o accettare la risposta o specificare le tue esigenze – tgdn

risposta

1

Sembra che nel browser sia necessaria una libreria JS che esegue il ritaglio effettivo. Quindi è possibile utilizzare AJAX per inviarlo al server.

DarkroomJS potrebbe essere proprio quello che ti serve. Usa la tela HTML5 per modificare le immagini nel browser. In realtà ha alcune funzionalità in più del necessario, ma dovrebbe portare a termine il lavoro.

+0

Potresti essere un po 'più specifico su come farlo nell'amministratore di django? Non ho molta conoscenza delle tecnologie front-end. – Iqbal

+0

In realtà non conosco molto bene l'amministratore di Django, quindi non sono molto sicuro delle specifiche. Ho fatto un po 'su Google e ho trovato questo articolo che potrebbe essere utile, comunque: http://www.mechanicalgirl.com/post/batch-image-upload-drag-and-drop-django-admin/ L'articolo è su creando un uploader di immagini drag-and-drop, ma probabilmente potresti sostituire quella funzionalità con una libreria di ritaglio. – BenWurth