Używam Django + PIL + Amazon boto w aplikacji internetowej. Użytkownik przesyła obraz, a aplikacja wyświetla go. Przeważnie ludzie wysyłają zdjęcia zrobione z ich telefonu komórkowego. Czasami obraz jest wyświetlany w niewłaściwej orientacji. Czy istnieje sposób użycia PIL lub Django ImageField, aby uzyskać meta informacje z obrazu i użyć go do obracania obrazu do prawidłowej orientacji?Używanie trybu PIL do automatycznego obracania zdjęcia zrobionego za pomocą telefonu komórkowego i accelorometru
7
A
Odpowiedz
3
Spróbuj uzyskać informacje EXIF. N.B .: metoda _getexif()
należy do wtyczki JPEG. Nie będzie istnieć w innych typach obrazów.
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]
random obrazek znalazłem na moim twardym dysku, to produkowane:
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
Jest to wartość Orientation
, że chcesz. Jego znaczenie można znaleźć np. na exif orientation page.
Surowe dane exif są dostępne jako ciąg od Image.info['exif']
. Obrót można wykonać za pomocą metody rotate()
.
Nie jestem świadomy metody zmiany danych EXIF przy użyciu PIL, poza zmianą danych pierwotnych.
3
Używam django-imagekit do przetwarzania obrazów następnie używając 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}
)
Herezje wątek, który może może pomóc: http: //stackoverflow.com/questions/1606587/how-to-use-pil- aby zmienić rozmiar i zastosować-obrót-exif-informacje-do-pliku – Jingo
To może ci pomóc http://stackoverflow.com/questions/4228530/pil-thumbnail-is-rotating-my-image – Rakesh