我在一个web应用程序中使用Django + PIL +亚马逊boto。用户发送图片并且webapp显示它。大多数人都会发送手机拍摄的照片。有时,图像显示方向错误。有没有办法使用PIL或Django的ImageField从图像中获取元信息并使用它来将图像旋转到正确的方向?使用PIL自动旋转拍摄的手机和accelorometer
7
A
回答
3
试试这个获取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 orientation page。
原始exif数据可从Image.info['exif']
以字符串形式获得。 旋转可以用rotate()
方法完成。
我不知道使用PIL更改EXIF数据的方法,而不是更改原始数据。
3
我使用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}
)
相关问题
- 1. 自动旋转智能手机拍摄的照片
- 2. 从相机拍摄的iphone图像自动旋转-90度
- 3. 使用相机拍摄时将图像旋转至手机的方向:Android
- 4. UIImageView从相机拍摄后旋转
- 5. 拍摄照片旋转90度在三星手机
- 6. 来自相机拍摄图像的图像旋转问题
- 7. 使用手机拍摄连续图像
- 8. 变换旋转拍摄svg
- 9. 图片旋转90度拍摄时自拍
- 10. 在libgdx中基于手臂旋转的拍摄对象java
- 11. 如何将使用Android手机拍摄的拍摄图像移动到使用Phonegap的另一个文件夹
- 12. 相机拍摄的图像与默认90度角旋转
- 13. Android旋转相机拍摄的照片本身
- 14. 使用MediaStore自动拍摄照片Intent
- 15. 如何旋转使用takePicture拍摄的图像?
- 16. 上传图片拍摄从android手机
- 17. Flex手机拍摄多张照片
- 18. Android将照片旋转90度(由相机拍摄)
- 19. 使用framelayout和surfaceview拍摄的摄像机
- 20. 使用集成相机自动拍摄照片
- 21. Android中的摄像头拍摄的旋转图片
- 22. Django rest框架 - 使用PIL自动旋转图像
- 23. 设置摄像机旋转
- 24. 拍摄来自相机的照片
- 25. 使用手机摄像头拍摄条形码时的条形码读取
- 26. 即使在JPEG格式中从相机拍摄时旋转的图像
- 27. 使用cocos2d旋转手机旋转对面的精灵?
- 28. 旋转和保存拍摄的图像,而无需使用位图
- 29. Unity在斜坡向上/向下自动旋转摄像机
- 30. 旋转下的场景重建和小型摄像机移动
继承人一个线程,也许可以帮助你:HTTP://stackoverflow.com/questions/1606587/how-to-use-pil-调整大小和应用旋转exif信息的文件 – Jingo
这可能会帮助你http://stackoverflow.com/questions/4228530/pil-thumbnail-is-rotating-my-image – Rakesh