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
7
A
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}
)
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
Điều này có thể giúp bạn http://stackoverflow.com/questions/4228530/pil-thumbnail-is-rotating-my-image – Rakesh