문제

프론트 엔드 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 사용자가 도움이되기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top