2009-08-19 4 views
4

프론트 엔드 GUI 용 PyQt4를 사용하여 프로그램을 작성 중이며이 프로그램은 백엔드 데이터베이스 (MySQL 또는 SQLite가 될 수 있음)에 액세스합니다. 나는 데이터베이스에 일부 이미지 데이터를 저장할 필요가 아래 나는 데이터베이스에 BLOB 데이터 필드 (JPEG 형식) 이미지 파일을 가져 오는 데 사용할 파이썬 코드 :BLOB 이미지 데이터를 QPixmap에로드하십시오.

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 개체를 만드는 방법에 관한 것입니다. -의 cPickle & StringIO -> PIL 이미지 객체

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 이미지 개체 -> 임시 이미지 파일

데이터베이스에

(1) 육각 STR : 내 현재의 접근 방식은 다음과 같은 단계를 포함한다

(3) 임시 이미지 파일 -> QPixmap

이 접근법은 정상적으로 작동합니다. 그러나 사용자 상호 작용에 대한 프로그램 응답 속도를 늦출 수있는 임시 이미지 파일을 작성하거나 읽지 않아도되는 것이 좋습니다. 나는 QPixmap::loadFromData()을 사용하여 데이터베이스에 저장된 BLOB 데이터에서 직접로드 할 수 있으며이 함수를 사용하는 방법에 대한 예를 보여줄 수 있기를 바랍니다.

TIA,

+0

왜 PIL 단계를 사용합니까? Qt는 JPEG 데이터를로드하는 것에 매우 만족합니다. http://docs.huihoo.com/pyqt/pyqt4/html/qpixmap.html#reading-and-writing-image-files – balpha

+0

Qt가 JPEG 데이터를로드 할 수 있습니다. 내가 찾고있는 것은 BLOB 필드에서 인코딩 된 문자열을 QPixmap 개체로 변환하는 코드 단편입니다. 감사! –

+0

나는 QPixmap :: loadFromData (cPickle.loads (s))를 사용할 수 있습니다. 여기서 s는 BLOB 필드에서 가져온 문자열 데이터입니다. 도와 주셔서 감사합니다. –

답변

8
당신은 문자열에서 이미지를로드 한 후 픽스맵로 변환하는 QImage.fromData 정적 인 방법을 사용할 수 있습니다

:

image_data = get_image_data_from_blob() 
qimg = QtGui.QImage.fromData(image_data) 
pixmap = QtGui.QPixmap.fromImage(qimg) 
2

접근 방식에 의해 제안 개미 Aasma 작품과 실제로 그냥 다음 코드를 사용하여 OK :

image_data = cPickle.loads(str(s)) # s is fetched from DB 
qp = QPixmap() 
qp.loadFromData(image_data) 

모든 도움과 정보를 제공해 주셔서 감사합니다.

0

좋은 시간과 비슷한 문제를 해결하기 위해 googleing의 절반 후, 나는 QT와 컴파일 된 .exe에서 JPEG를로드 결국. 내가 python3.1를 사용하고, 따라서 앞서 언급 한 솔루션의 일부 사용할 수 있습니다 : (내가 대신 py2exe에의 cxfreeze을 사용하고 있기 때문에 py2exe에 만 python2 작동 등) py2exe에 근무

  • 팁을
  • PIL이 필요한 팁 (python2, afaik에만 해당).

여기에 게시 된 솔루션이 작동하지 않는 동안, 매우 비슷한 그랬어 : 나는 단지 내 EXE의 폴더에 [PythonDir]\Lib\site-packages\PyQt4\plugins\imageformats를 복사 내가 다른 솔루션 다음 해당 폴더에서 만든 qt.conf 파일을 제거했습니다. 그게 전부입니다 (제 생각 : p).

그런 다음 QPixmap의 생성자를 사용하여 jpg를로드했거나 QImage을 먼저로드했는지 여부가 문제가되지 않았습니다. 또한 setup.pycxfreeze.bat에 대해 cxfreeze를 사용하여 exe로 컴파일하는 데 필요한 특별한 옵션이 필요하지 않았습니다.

(이 솔루션은 http://www.thetoryparty.com/wp/2009/08/27/pyqt-and-py2app-seriously-i-dont-know-what-to-do-with-you-when-youre-like-this/에 jbz에 의해 게시 된)

이 질문에 조금 오래지만, 여전히 문제가있을 것 같다, 나는이 대답은 거기 python3.1 사용자에게 도움이되기를 바랍니다.

관련 문제