Я хотел бы использовать 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.