2012-11-09 5 views
0

POST QPixmap 이미지 bia http를 시도합니다. 그러기 위해서 QPixmap이 임시 파일에 저장되도록하고 python 파일 클래스로 읽어야합니다. POST가 작동합니다. 하지만 QPixmap을 POST하는 또 다른 방법이 있다고 생각합니다. 추측 하건데 QPixmap을 StringIO (또는 다른 것)에 저장하면 POST로 할 수 있습니다.pyqt : QPixmap을 StringIO에 저장 하시겠습니까?

현재 나는 이렇게 쓰고 있습니다.

from poster.encode import multipart_encode 
from poster.streaminghttp import register_openers 
import urllib2, os 

tmpIm = "c:/tmpIm.png" 
PIXMAP.save(tmpIm, "PNG") 
register_openers() 
_f = open(tmpIm, "rb") 
datagen, headers = multipart_encode({"image": _f}) 
request = urllib2.Request(UPLOAD_URL, datagen, headers) 
_rnt = urllib2.urlopen(request) 
_f.close() 
os.remove(tmpIm) 

답변

2

당신은 QBuffer를 통해 QPixmapQByteArray에 저장 한 다음 StringIO 객체로 그것을 읽을 수 있습니다

from PyQt4.QtCore import QBuffer, QByteArray, QIODevice 
from PyQt4.QtGui import QPixmap, QApplication 

import cStringIO as StringIO 


if __name__ == '__main__': 
    # Create a QApplication so that QPixmaps will work. 
    app = QApplication([]) 

    # Load a PNG into a QPixmap. 
    pixmap = QPixmap('c:/in.png') 

    # Save QPixmap to QByteArray via QBuffer. 
    byte_array = QByteArray() 
    buffer = QBuffer(byte_array) 
    buffer.open(QIODevice.WriteOnly) 
    pixmap.save(buffer, 'PNG') 

    # Read QByteArray containing PNG into a StringIO. 
    string_io = StringIO.StringIO(byte_array) 
    string_io.seek(0) 

    # Write the StringIO back to a file to test all is ok. 
    with open('c:/out.png', 'wb') as out_file: 
     out_file.write(string_io.read()) 
관련 문제