2012-08-26 16 views
7

Uso el botox Django + PIL + Amazon en una aplicación web. El usuario envía la imagen y la aplicación web la muestra. En su mayoría, las personas envían una foto tomada desde su teléfono celular. A veces, la imagen se muestra en la orientación incorrecta. ¿Hay alguna manera de utilizar PIL o ImageField de Django para obtener la metainformación de la imagen y usarla para rotar la imagen a la orientación correcta?Uso de PIL para girar automáticamente la imagen tomada con el teléfono celular y el acelerador

+1

Heres un hilo que a lo mejor le puede ayudar a: http: //stackoverflow.com/questions/1606587/how-to-use-pil- para cambiar el tamaño-y-aplicar-rotación-exif-información-al-archivo – Jingo

+0

Esto podría ayudarlo http://stackoverflow.com/questions/4228530/pil-thumbnail-is-rotating-my-image – Rakesh

Respuesta

3

Pruebe esto para obtener la información EXIF. N.B .: el método _getexif() pertenece al plugin JPEG. No existirá en otros tipos de imágenes.

import Image 
from PIL.ExifTags import TAGS 

im = Image.open('a-jpeg-file.jpg') 
exifdict = im._getexif() 
if len(exifdict): 
    for k in exifdict.keys(): 
     if k in TAGS.keys(): 
      print TAGS[k], exifdict[k] 
     else: 
      print k, exifdict[k] 

Para una imagen al azar que he encontrado en mi disco duro, esto produce:

ExifVersion 0221 
ComponentsConfiguration 
ApertureValue (4312, 1707) 
DateTimeOriginal 2012:07:19 17:33:37 
DateTimeDigitized 2012:07:19 17:33:37 
41989 35 
FlashPixVersion 0100 
MeteringMode 5 
Flash 32 
FocalLength (107, 25) 
41986 0 
Make Apple 
Model iPad 
Orientation 1 
YCbCrPositioning 1 
SubjectLocation (1295, 967, 699, 696) 
SensingMethod 2 
XResolution (72, 1) 
YResolution (72, 1) 
ExposureTime (1, 60) 
ExposureProgram 2 
ColorSpace 1 
41990 0 
ISOSpeedRatings 80 
ResolutionUnit 2 
41987 0 
FNumber (12, 5) 
Software 5.1.1 
DateTime 2012:07:19 17:33:37 
41994 0 
ExifImageWidth 2592 
ExifImageHeight 1936 
ExifOffset 188 

Es el valor Orientation que desea. Su significado se puede encontrar, p. en el exif orientation page.

Los datos brutos exif están disponibles como una cadena desde Image.info['exif']. La rotación se puede realizar con el método rotate().

No conozco un método para cambiar los datos EXIF ​​utilizando PIL, salvo cambiar los datos sin formato.

3

estoy usando django-imagekit para el procesamiento de imágenes a continuación, utilizando imagekit.processors.Transpose

from imagekit.models import ImageSpecField 
from imagekit.processors import ResizeToFill, Transpose, SmartResize 

class UserProfile(models.Model): 
    avatar = models.ImageField(upload_to='upload/avatars', max_length=255, blank=True, null=True) 
    avatar_thumbnail = ImageSpecField(
    source='avatar', 
    processors = [Transpose(),SmartResize(200, 200)], 
    format = 'JPEG', 
    options = {'quality': 75} 
) 
Cuestiones relacionadas