2012-08-26 31 views
7

Tôi đang sử dụng Django + PIL + Amazon boto trong một ứng dụng web. Người dùng gửi trong ảnh và webapp hiển thị nó. Chủ yếu là, mọi người gửi ảnh chụp từ điện thoại di động của họ. Đôi khi, hình ảnh được hiển thị theo hướng sai. Có cách nào để sử dụng PIL hoặc Django ImageField để có được những thông tin meta từ hình ảnh và sử dụng nó để xoay hình ảnh với định hướng đúng?Sử dụng PIL để hình ảnh tự động xoay chụp bằng điện thoại di động và accelorometer

+1

Heres a thread rằng có lẽ có thể giúp bạn: http: //stackoverflow.com/questions/1606587/how-to-use-pil- để thay đổi kích thước và áp dụng-xoay-exif-information-to-the-file – Jingo

+0

Điều này có thể giúp bạn http://stackoverflow.com/questions/4228530/pil-thumbnail-is-rotating-my-image – Rakesh

Trả lời

3

Hãy thử điều này để nhận được thông tin EXIF. N.B .: Cơ sở phương pháp _getexif() thuộc về các plugin JPEG. Nó sẽ không tồn tại trong các loại hình ảnh khác.

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] 

Đối với một hình ảnh ngẫu nhiên tôi tìm thấy trên ổ cứng của tôi, điều này tạo ra:

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 

Nó là giá trị Orientation mà bạn muốn. Có thể tìm thấy ý nghĩa của nó, ví dụ: trên số exif orientation page.

dữ liệu EXIF ​​liệu có sẵn như là một chuỗi từ Image.info['exif']. Rotation có thể được thực hiện với phương pháp rotate().

Tôi không biết phương pháp thay đổi dữ liệu EXIF ​​bằng PIL, ngoài việc thay đổi dữ liệu thô.

3

Tôi đang sử dụng django-imagekit để xử lý hình ảnh sau đó sử dụng 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} 
) 
Các vấn đề liên quan