2011-05-14 76 views
19

我想使用QWebView進行SVG縮略圖作業,因爲它支持過濾器(與僅支持SVG Tiny 1.2的QSvgRender不同)。它似乎工作得很好,除了字體渲染,但可以使用fontconfig包進行調整。問題在於它似乎是使用過濾器對元素進行欠採樣。沒有過濾器的元件看起來不錯而尖銳,而帶過濾器的元件像素化且模糊。QWebView欠採樣SVG渲染

from PyQt4.QtGui import * 
from PyQt4.QtCore import * 
from PyQt4.QtSvg import * 
from PyQt4.QtWebKit import * 
import sys 
import time 

if __name__ == '__main__': 

    app = QApplication(sys.argv) 

    data = open('/home/xxx/workspace/yyy/zzz/out.svg').read() 

    # svg = QSvgRenderer(QByteArray(data)) 
    qim = QImage(int(1024), int(768), QImage.Format_ARGB32)                                             
    web = QWebView() 
    web.setRenderHint(QPainter.SmoothPixmapTransform) 
    web.setRenderHint(QPainter.Antialiasing) 
    web.setRenderHint(QPainter.TextAntialiasing) 
    painter = QPainter() 

    def load_finished(ok): 
     web.resize(1024,768) 
     painter.begin(qim) 
     # svg.render(painter) 
     web.render(painter) 
     painter.end() 

     print "null:", qim.isNull() 
     qim.save('test2.png') 
     sys.exit() 

    web.connect(web, SIGNAL('loadFinished(bool)'), load_finished) 
    web.load(QUrl('file:///home/xxx/workspace/yyy/zzz/out.svg')) 
    sys.exit(app.exec_()) 

Qt 4.7。使用Inkscape,rsvg或Chrome,Firefox進行渲染時,相同的SVG文件看起來不錯。

result

+3

你應該張貼您的例子SVG文件進行測試。 – abbot 2011-05-17 17:31:04

+0

和out.svg文件的網址。 – linjunhalida 2011-09-16 08:02:13

回答

1

嘗試使用QWebPage(非GUI渲染器)進行渲染,看看是否有幫助。我看不到任何會影響渲染的設置。

代碼會是這樣的(未選中):

QWebPage page 
QWebFrame frame = page.mainFrame() 
frame.load(url) 
frame.render(painter)