感覺被迫分享我的版本,它在功能上等同於其他答案建議,卻又是的,在我看來,清潔:
import functools
def image_transpose_exif(im):
exif_orientation_tag = 0x0112 # contains an integer, 1 through 8
exif_transpose_sequences = [ # corresponding to the following
[],
[Image.FLIP_LEFT_RIGHT],
[Image.ROTATE_180],
[Image.FLIP_TOP_BOTTOM],
[Image.FLIP_LEFT_RIGHT, Image.ROTATE_90],
[Image.ROTATE_270],
[Image.FLIP_TOP_BOTTOM, Image.ROTATE_90],
[Image.ROTATE_90],
]
try:
seq = exif_transpose_sequences[im._getexif()[exif_orientation_tag] - 1]
except (AttributeError, TypeError, KeyError, IndexError):
return im
else:
return functools.reduce(lambda im, op: im.transpose(op), seq, im)
而且在我的特別用途的情況下,這是使用Django和Nginx提供圖像縮略圖,我發現X-Accel-Redirect HTTP頭非常方便。它允許Python代碼將縮略圖保存到特定位置,然後將其傳遞給Nginx,以便將其發送到客戶端,從而釋放更多資源密集型Python代碼,以執行比這更復雜的任務。
或者事先讀取EXIF數據並手動應用轉換。 – 2010-11-19 19:59:27
感謝你們的答覆。我試圖去除所有的EXIF數據,但是如果必須旋轉的話就加回數據。這變成了PITA比我原先假定的要多得多。只需要制定腳本即可完成。再次感謝! – Hoopes 2010-11-22 21:37:45
由於您正在調整大小,因此您可能不在意,但請不要忘記,即使是簡單的旋轉,對於jpeg,有時也是一種有損操作。 – 2011-04-10 21:02:28