2013-06-29 14 views
7

Ho un filtro delle miniature che finisce sempre per ruotare l'immagine di 90 gradi verso sinistra quando l'immagine è più alta della larghezza (ho controllato, e il l'immagine originale è diritta, mentre l'immagine memorizzata nella cache viene ruotata). Il codice in questione è simile al seguente:Arresto della rotazione automatica delle immagini in Django-imagekit Miniatura

profile_image = models.ImageField(upload_to='profile_images', default='profile_images/icon.png') 
profile_icon = ImageSpecField(source='profile_image', 
           processors=[processors.Thumbnail(width=72, height=72, crop=True)], 
           format='JPEG', 
           options={'quality': 60}) 

Come si interrompe l'auto-rotazione?

risposta

2

Ok, si scopre che si tratta di un problema con il caricamento delle immagini, non con Django. Le immagini scattate su un iPhone possono avere metadati di orientamento del telefono che inducono il browser a pensare che l'orientamento naturale della foto sia laterale. Ma se apro la foto in Anteprima, la ruotiamo a sinistra e poi torna alla normalità, quindi la salviamo di nuovo, non ci sono problemi.

Feed image shows rotated in certain browsers

Sorpresa!

7

Contento di averlo capito, ma ImageKit potrebbe essere in grado di aiutarti ancora. Scopri il processore Transpose (imagekit.processors.Transpose). Per impostazione predefinita, utilizzerà i metadati nell'immagine e ruoterà di quell'importo! Assicurati di elencare questo processore prima, in quanto i processori successivi elimineranno i metadati dall'immagine.

+0

[documentazione di imagekit] (https://django-imagekit.readthedocs.io/en/latest/) – brennan

3

Per approfondire utili puntatore del matthewwithanm, il codice del PO dovrebbe essere ottimizzato per assomigliare a questo:

profile_image = models.ImageField(upload_to='profile_images', default='profile_images/icon.png') 
profile_icon = ImageSpecField(source='profile_image', 
           processors=[ 
            processors.Transpose(), 
            processors.Thumbnail(width=72, height=72, crop=True) 
           ], 
           format='JPEG', 
           options={'quality': 60}) 

cioè, aggiungere una chiamata a processors.Transpose() senza argomenti.

Ho riscontrato questo problema con un'immagine originale in formato verticale scaricata da Flickr. Quell'immagine (scattata su un iPhone) è in formato verticale e, per impostazione predefinita, imagekit lo ruota, in questo caso particolare, di 90 gradi in senso antiorario.