Arhn - архитектура программирования

Использование PIL для автоматического поворота изображения, сделанного с помощью мобильного телефона и акселорометра.

Я использую Django + PIL + Amazon boto в веб-приложении. Пользователь отправляет изображение, и веб-приложение отображает его. В основном люди присылают фотографии, сделанные с мобильного телефона. Иногда изображение отображается в неправильной ориентации. Есть ли способ использовать PIL или Django ImageField, чтобы получить метаинформацию из изображения и использовать ее для поворота изображения в правильную ориентацию?



Ответы:


1

Я использую django-imagekit для обработки изображений, а затем использую 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}
  )
13.04.2014

2

Попробуйте это для получения информации EXIF. N.B.: метод _getexif() относится к подключаемому модулю JPEG. Его не будет в других типах изображений.

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]

Для случайного изображения, которое я нашел на своем жестком диске, это произвело:

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

Это значение Orientation, которое вам нужно. Его значение можно найти, например. на странице ориентации exif.

Необработанные данные exif доступны в виде строки из Image.info['exif']. Вращение можно выполнить с помощью метода rotate().

Я не знаю способа изменить данные EXIF ​​с помощью PIL, кроме изменения необработанных данных.

26.08.2012
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..