Ich habe untersucht, wie eine SVG-Datei mit Python ausgegeben wird, aber Qt (PySide) ist einfacher als die stärkste SVG-Bibliothek von Python svgwrite. Dann kam ich zu dem Schluss, dass es das stärkste sein könnte (ich gebe den Einwand zu).
Ich glaube nicht, dass die meisten Leute SVG kennen, aber ich werde es vorerst erklären.
SVG ist eines der typischen Vektorbildformate. Im Vergleich zum herkömmlichen Bild im Rasterformat gibt es auch bei Vergrößerung oder Verkleinerung des Bildes kein Zacken, sodass eine schöne Anzeige auch an Orten erzielt werden kann, an denen die Anzeigegröße je nach Umgebung schwankt, z. B. bei einem Webbrowser.
Der QSvg-Generator wird für die SVG-Ausgabe mit Qt (PySide) verwendet. Schauen wir uns ein einfaches Beispiel an, das SVG mit PySide ausgibt.
#! usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals, print_function, absolute_import
import sys
from PySide.QtCore import *
from PySide.QtGui import *
from PySide.QtSvg import *
app = QApplication(sys.argv)
svg_gen = QSvgGenerator()
svg_gen.setFileName("hello.svg")
svg_gen.setSize(QSize(200, 80))
svg_gen.setViewBox(QRect(0, 0, 200, 80))
svg_gen.setTitle("hello svg")
svg_gen.setDescription("this is sample svg.")
painter = QPainter()
painter.begin(svg_gen)
rect = QRect(0, 0, 200, 80)
painter.fillRect(rect, Qt.yellow)
painter.setPen(Qt.blue)
painter.setFont(QFont("Arial", 30))
painter.drawText(rect, Qt.AlignCenter, "Hello SVG")
painter.end()
Ergebnis anzeigen (* Wird in PNG angezeigt, da SVG nicht eingefügt werden kann.)
Bitte beachten Sie, dass nur die SVG-bezogenen Module mit `aus PySide.QtSvg import *`
importiert werden.
Sie müssen lediglich die SVG-Einstellungen in den QSvg-Generator eingeben und dann wie gewohnt mit QPainter zeichnen. Ich habe die Elemente von SVG überhaupt nicht manipuliert, aber dies allein erstellt eine SVG-Datei. (Natürlich handelt es sich nicht um eine vollständige SVG-Konvertierung, und Funktionen, über die SVG nicht verfügt, wie z. B. Textumbruch, werden ignoriert.)
SVG-Zeichnungen können übrigens auch in QGraphicsView mit QSvgWidget oder QGraphicsSvgItem angezeigt werden.
Die SVG-Ausgabe ist auch über QGraphicsScene möglich.
scene = QGraphicsScene()
rect = QRect(0, 0, 200, 80)
scene.setSceneRect(rect)
scene.addRect(rect, QPen(Qt.transparent), QBrush(Qt.yellow))
text_item = scene.addText("Hello SVG", QFont("Arial", 30))
text_item.setDefaultTextColor(Qt.blue)
painter = QPainter()
painter.begin(svg_gen)
scene.render(painter)
painter.end()
Es ist wichtig, dass QGraphicsScene ausgegeben werden kann. Sie können die Elementposition mit einer Maus usw. in QGraphicsView anpassen und so wie sie ist in SVG ausgeben. Sie können ganz einfach eine Live-Vorschau-Umgebung für SVG erstellen.
svgwrite ist eine flexible und sehr benutzerfreundliche Bibliothek. Ich möchte jedoch die Überlegenheit gegenüber svgwrite im Vergleich zur Verwendung von Qt erwähnen.
Da svgwrite ein Wrapper für XML ist, zum Guten oder zum Schlechten, gibt es keine getBBox, die bei der Anzeige nach einem Kopfgeldfeld fragt. Dies ist beim Umgang mit Text sehr problematisch, da Sie die Größe des Textes nicht kennen.
Da SVG ausgegeben wird, ist es natürlich erforderlich, dass Kenntnisse über Elemente erforderlich sind. Mit Qt kann SVG jedoch ohne Kenntnisse über Elemente ausgegeben werden.
Wenn Sie SVG im Programm ausgeben möchten, ist try & error erforderlich. Wenn Sie Qt verwenden, wird die Zeichnung von QPainter so wie sie ist zu SVG, sodass die Vorschauumgebung unweigerlich abgeschlossen ist. Auch nach der Konvertierung in SVG können Sie dies mit QSvgWidget überprüfen. Sobald Sie ein Programm erstellt haben, können Sie es gleichzeitig mit der Live-Vorschau ändern und erstellen.
Beachten Sie, dass die SVG-Version 1.2 ist, was von Qt5 verarbeitet werden kann, die SVG-Version jedoch 1.1, da es sich bei Verwendung von PySide um Qt4.8 handelt. Ich hoffe nur, dass PySide 2 so bald wie möglich offiziell veröffentlicht wird.
Die Ausgabe von SVG mit Qt ist sehr einfach. Wenn Sie Qt kennen, müssen Sie SVG nicht kennen, was für SVG-Anfänger ein großer Vorteil ist.
Das Erstellen flexibler SVGs wie das Verknüpfen mit HTML5 und das Anwenden von Stylesheets muss an svgwrite übergeben werden. Qt ist jedoch eine hervorragende Option für SVGs, die nur angezeigt werden.
Übrigens analysiere ich automatisch die Struktur der C-Sprache und gebe das Blockdiagramm (Ist es der Name?) In SVG aus. Die folgende Abbildung wird für die BITMAPINFOHEADER-Struktur ausgegeben.
Es ist praktisch, es durch automatische Generierung in ein Handbuch wie Sphinx einzubetten, da Sie die Struktur wie das Putten verstehen können.
Recommended Posts