J'étudiais comment générer un fichier SVG en Python, mais Qt (PySide) est plus facile que la bibliothèque SVG la plus puissante de python svgwrite. Puis je suis arrivé à la conclusion que ce pourrait être le plus fort (j'admets l'objection).
Je ne pense pas que la plupart des gens connaissent SVG, mais je vais l'expliquer pour le moment.
SVG est l'un des formats d'image vectorielle typiques. Par rapport à l'image au format raster conventionnel, il n'y a pas de dentelure même lorsque l'image est agrandie ou réduite, de sorte qu'un bel affichage peut être obtenu même dans les endroits où la taille d'affichage fluctue en fonction de l'environnement, comme un navigateur Web.
QSvg Generator est utilisé pour la sortie SVG à l'aide de Qt (PySide). Jetons un coup d'œil à un exemple simple qui produit SVG avec PySide.
#! 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()
Afficher le résultat (* affiché en PNG car SVG ne peut pas être collé)
Veuillez noter que seuls les modules liés à SVG sont importés avec
from PySide.QtSvg import * ''.
Tout ce que vous avez à faire est de saisir les paramètres SVG dans le générateur QSvg, puis d'utiliser QPainter pour dessiner comme d'habitude. Je n'ai pas du tout manipulé les éléments de SVG, mais cela seul crée un fichier SVG. (Bien sûr, ce n'est pas une conversion SVG complète, et les fonctionnalités que SVG n'a pas, telles que l'habillage de texte, sont ignorées.)
À propos, le dessin SVG peut également être affiché dans QGraphicsView avec QSvgWidget ou QGraphicsSvgItem.
La sortie SVG est également possible à partir de QGraphicsScene.
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()
Il est important que QGraphicsScene puisse être sorti, vous pouvez ajuster la position de l'élément avec une souris, etc. dans QGraphicsView et le sortir en SVG tel quel. Vous pouvez facilement créer un environnement de prévisualisation en direct pour SVG.
svgwrite est une bibliothèque flexible et très facile à utiliser. Cependant, je voudrais mentionner la supériorité sur svgwrite par rapport au cas de l'utilisation de Qt.
Puisque svgwrite est un wrapper pour XML, pour le meilleur ou pour le pire, il n'y a pas de `` getBBox '' qui demande une boîte de prime lors de son affichage. Ceci est très gênant lorsqu'il s'agit de texte car vous ne connaissez pas la taille du texte.
Puisqu'il produit SVG, il est naturel que des connaissances sur les éléments soient nécessaires, mais avec Qt, SVG peut être produit sans aucune connaissance des éléments.
Si vous voulez sortir SVG sur le programme, essayez et une erreur est requise. Si vous utilisez Qt, le dessin de QPainter devient SVG tel quel, donc l'environnement de prévisualisation est inévitablement terminé. Même après la conversion en SVG, vous pouvez le vérifier avec QSvgWidget, donc une fois que vous avez construit un programme, vous pouvez le modifier et le créer en même temps avec un aperçu en direct.
Notez que la version SVG est 1.2, qui peut être gérée par Qt5, mais que la version SVG est 1.1 car elle est Qt4.8 lors de l'utilisation de PySide. J'espère juste que PySide 2 sera officiellement publié dès que possible.
La sortie de SVG avec Qt est très simple. Si vous connaissez Qt, vous n'avez pas besoin de connaître SVG, ce qui est un gros avantage pour les débutants en SVG.
La création de SVG flexibles tels que la liaison avec HTML5 et l'application de feuilles de style doit être transférée à svgwrite, mais Qt est une excellente option pour les SVG en affichage uniquement.
Au fait, j'analyse automatiquement la structure du langage C et j'envoie le diagramme (est-ce le nom?) En SVG. La figure suivante est sortie pour la structure BITMAPINFOHEADER.
Il est pratique de l'intégrer dans un manuel tel que Sphinx par génération automatique car on peut comprendre la structure telle que la mise.
Recommended Posts