2012-10-16 1 views
1

simple PyQt4 app, loading picture with QPixmapscaling with ratio을 고려하십시오. 코드의PyQt4 QPixmap EXIF에 따른 회전 Jpg

중요한 부분 : 내가 잘못 회전에서 내 사진을보고

from PyQt4 import QtGui, QtCore 
(...) 
pixmap = QtGui.QPixmap("example.jpg") 
pixmap = pixmap.scaled(1100, 1800, QtCore.Qt.KeepAspectRatio) 

나는 놀랐습니다. 내가 생각

는 이유는 사진이 고려 회전이 적용되어야한다 카메라 위치에 대한 EXIF 정보가 포함되어 있다는 것입니다 :

프로그램의 원래 짧은 형식에 가까운 체재 PyQt4 이것을 만드는 방법
$ exiftool example.jpg | grep -i rot 
Orientation      : Rotate 270 CW 
Auto Rotate      : Rotate 270 CW 
Rotation      : 270 

. .. 바람직하게는 짧은 & 달콤한파이 톤 방식으로?

답변

3

EXIF ​​정보를 읽고 구문 분석 할 방법이 필요합니다. (Py) Qt에는 그 기능이 내장되어 있지 않습니다. 하지만 좋은 파이썬 도구가 있습니다. pyexiv2, EXIF.py, PyExifTool입니다. 반면, 그렇지 않은 가장 우아한 방법이다

pixmap = pixmap.scaled(1100, 1800, QtCore.Qt.KeepAspectRatio) 
pixmap = pixmap.transformed(QtGui.QTransform().rotate(angle)) 
0

,하지만 난 내가 사용하는 대부분의 시스템에 설치 될 exiftool를 발견했습니다 당신이 회전 각도를 일단

, 그것은 당신의 QPixmap에 적용하는 것은 쉽다 pyexiv2과 같은 패키지는 반드시 그런 것은 아닙니다.

내가에서 제안 된 래퍼 클래스를 사용하여, exiftool을 사용 : https://stackoverflow.com/a/10075210/544721를 (참고 : str<->bytes 변환을 위해 적절한 장소에 .encode().decode()를 추가 할 필요가 Py3k와 래퍼를 사용하기 위해) 여전히

pixmap = QtGui.QPixmap('example.jpg') 
with ExifTool() as e: 
    exif_metadata = e.get_metadata('example.jpg') 
    picture_orientation_code = exif_metadata[0]['EXIF:Orientation'] 
if picture_orientation_code == 8: 
    pixmap = pixmap.transformed(QtGui.QTransform().rotate(270)) 
elif picture_orientation_code == 6: 
    pixmap = pixmap.transformed(QtGui.QTransform().rotate(90)) 
pixmap = pixmap.scaled(1100, 1600, QtCore.Qt.KeepAspectRatio) 

을 - I 가장 우아한 것으로 생각하지 마십시오.하지만 더 나은 해결책이 나타날 때까지이 답변이 다른 독자에게 도움이되기를 바랍니다.