我在网络应用程序中使用 Django + PIL + Amazon boto。用户发送图片,webapp 显示它。大多数情况下,人们发送从他们的手机拍摄的照片。有时,图像以错误的方向显示。有没有办法使用 PIL 或 Django 的 ImageField 从图像中获取元信息并使用它将图像旋转到正确的方向?
问问题
5042 次
2 回答
4
我正在使用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}
)
于 2014-04-13T16:06:51.910 回答
3
试试这个来获取 EXIF 信息。注意:该_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()
使用该方法可以完成旋转。
除了更改原始数据之外,我不知道使用 PIL 更改 EXIF 数据的方法。
于 2012-08-26T21:13:06.627 回答