블로브 이미지 데이터를 qpixmap에로드하십시오
문제
프론트 엔드 GUI 용 PYQT4를 사용하여 프로그램을 작성하고 있으며이 프로그램은 백엔드 데이터베이스 (MySQL 또는 SQLite 일 수 있음)에 액세스합니다. 일부 이미지 데이터를 데이터베이스에 저장해야하며 아래는 데이터베이스의 Blob 데이터 필드로 이미지 파일 (JPEG 형식)을 가져 오는 데 사용하는 Python 코드입니다.
def dump_image(imgfile):
i = open(imgfile, 'rb')
i.seek(0)
w = i.read()
i.close()
return cPickle.dumps(w,1)
blob = dump_image(imgfile)
hex_str = blob.encode('hex')
# x"%s"%hex_str will be the string inserted into the SQL command
이 부분은 잘 작동합니다. 내 질문은 PYQT4의 데이터베이스에 저장된 이미지 데이터에서 qpixmap 객체를 만드는 방법에 관한 것입니다. 내 현재 접근 방식은 다음 단계를 포함합니다.
(1) 데이터베이스의 16 진수
def load_image(s):
o = cPickle.loads(s)
c = StringIO.StringIO()
c.write(o)
c.seek(0)
im = Image.open(c)
return im
(2) PIL 이미지 개체 -> 임시 이미지 파일
(3) 임시 이미지 파일 -> qpixmap
이 접근법도 잘 작동합니다. 그러나 사용자 상호 작용에 대한 프로그램 응답 속도를 늦출 수있는 임시 이미지 파일을 작성/읽을 필요가 없다면 더 나을 것입니다. 나는 내가 사용할 수 있다고 생각한다 qpixmap :: loadfromdata () 데이터베이스에 저장된 Blob 데이터에서 직접로드하고 여기에 누군가 가이 기능을 사용하는 방법에 대한 예를 보여줄 수 있기를 바랍니다.
티아,
빙
해결책
qimage.fromdata static 메소드를 사용하여 문자열에서 이미지를로드 한 다음 PixMap으로 변환 할 수 있습니다.
image_data = get_image_data_from_blob()
qimg = QtGui.QImage.fromData(image_data)
pixmap = QtGui.QPixmap.fromImage(qimg)
다른 팁
ANTS AASMA가 제안한 접근 방식은 실제로 다음 코드를 사용하는 것도 괜찮습니다.
image_data = cPickle.loads(str(s)) # s is fetched from DB
qp = QPixmap()
qp.loadFromData(image_data)
모든 도움과 정보에 감사드립니다.
비슷한 문제를 해결하기 위해 Google의 좋은 시간 30 분 후에, 나는 QT와 함께 .Exe에 JPEG를로드했습니다. Python3.1을 사용하고 있으므로 앞에서 언급 한 솔루션 중 일부를 사용할 수 없었습니다.
- py2exe에서 작동하는 팁 (py2exe가 python2에서만 작동하기 때문에 py2exe 대신 cxfreeze를 사용하기 때문에),
- PIL이 필요한 팁 (Python2, Afaik의 경우에만).
여기에 게시 된 솔루션은 작동하지 않았지만 매우 비슷한 점이 있습니다. [PythonDir]\Lib\site-packages\PyQt4\plugins\imageformats
내 exe의 폴더에 qt.conf
다른 솔루션에 따라 해당 폴더에서 만든 파일. 그게 다야 (나는 생각한다 : p).
그 후, JPG를 사용하여로드했는지 여부는 작동했습니다. QPixmap
의 생성자 또는 로딩 a QImage
첫 번째. 또한 두 가지 모두에 필요한 특별한 옵션없이 작동했습니다. setup.py
그리고 cxfreeze.bat
cxfreeze를 사용하여 EXE로 컴파일하는 방법.
(이 솔루션은 JBZ에 의해 게시되었습니다 http://www.thetoryparty.com/wp/2009/08/27/pyqt-and-py2app-seriely-i-dont-ly-what-lo-whou whing-like-like-like-this/)
이 질문은 조금 오래되었지만 문제가 여전히 존재하는 것처럼 보이기 때문에이 답이 Python3.1 사용자가 도움이되기를 바랍니다.