Подтвердить что ты не робот

QWebView с невыделенной выборкой SVG-рендеринга

Я хотел бы использовать QWebView для задания миниатюр SVG, потому что он поддерживает фильтры (в отличие от QSvgRender, который поддерживает только SVG Tiny 1.2). Кажется, это работает неплохо, за исключением рендеринга шрифтов, но это можно настроить с помощью пакета fontconfig. Проблема в том, что, похоже, это элементы с неснижаемыми элементами с фильтрами. Элементы без фильтров выглядят хорошо и острыми, а фильтры с фильтром - размытыми и размытыми.

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. Тот же SVG файл выглядит нормально при визуализации с использованием Inkscape, rsvg или в Chrome, Firefox.

result

4b9b3361

Ответ 1

Попробуйте выполнить рендеринг с помощью QWebPage (рендеринга без GUI), посмотрите, поможет ли это. Я не вижу никаких настроек, которые повлияли бы на рендеринг.

Код будет что-то вроде этого (не проверено):

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