2011-05-14 74 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)