Côté serveur SVG PNG (ou autre format d'image) en python
Actuellement, je suis en utilisant rsvg pour charger le svg (à partir d'une chaîne, et non pas à partir d'un fichier) et le dessin au caire. Quelqu'un sait d'une meilleure façon? J'utilise PIL ailleurs dans mon application, mais je ne connais pas de moyen de le faire avec PIL.
PIL ne prend pas en charge le format SVG; un rapide surf indique que vous avez probablement la droite de la chaîne.
Je viens de poster un plus récent commentaire à propos de ce cours ici - stackoverflow.com/a/19718153/542550 - un commentaire ci-dessous indique que "ImageMagick soutien semble être terrible", mais que l'intervenant n'a pas le construire/test. Il est maintenant 10/2013, et je viens de tester à l'aide de ImageMagick (via Baguette-py) pour importer une grande variété de SVGs et il fonctionnait très bien! J'ai encore plus de tests à faire, et va certainement tirer de ce commentaire en bas si je suis horriblement trompe, mais à ce point, il a fonctionné sans problème sur quelques SVGs qui étaient connus pour être buggy à l'aide d'autres méthodes.
Je viens de poster un plus récent commentaire à propos de ce cours ici - stackoverflow.com/a/19718153/542550 - un commentaire ci-dessous indique que "ImageMagick soutien semble être terrible", mais que l'intervenant n'a pas le construire/test. Il est maintenant 10/2013, et je viens de tester à l'aide de ImageMagick (via Baguette-py) pour importer une grande variété de SVGs et il fonctionnait très bien! J'ai encore plus de tests à faire, et va certainement tirer de ce commentaire en bas si je suis horriblement trompe, mais à ce point, il a fonctionné sans problème sur quelques SVGs qui étaient connus pour être buggy à l'aide d'autres méthodes.
OriginalL'auteur colinmarc | 2010-05-28
Vous devez vous connecter pour publier un commentaire.
Voici ce que j'ai actuellement:
Il y a quelques erreurs à l'intérieur. Lors de la création d'un ImageSurface vous avez besoin d'Entier
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, round(int(x)), round(int(y))
Et vous devez vous assurer que maxwidth et maxheight est toujours définie par un nombre élevé qui serait mieux que 0. J'ai beaucoup de SVGs avec des hauteurs de 32000 qui aboutira à une erreur de mémoire.OriginalL'auteur colinmarc
Comment sur imagemagick? - http://www.imagemagick.org/script/magick-vector-graphics.php Il peut lire/écrire à partir de/vers stdin/stdout de sorte que Vous pouvez l'intégrer à votre application, même si Vous ne voulez pas utiliser les fichiers
convert
versions antérieures à la version de Mai 2010 de faire un horrible travail d'interprétation SVG. Étant donné le changelog, il ne semble pas comme ils ont encore obtenu le support SVG fonctionne bien (bien que je n'ai pas le construire pour le voir).OriginalL'auteur Maciek Sawicki
J'ai installé inkscape donc, je suis juste de l'agriculture le processus à l'inkscape commande avec inkscape -f fichier.svg -e fichier.png
L'aide de ce code:
Je suis sur windows 7, et a obtenu le Windows 5 Erreur [Accès Refusé] (ou quelque chose comme ça) jusqu'à ce que je suis passé à l'inkscape répertoire
cwd=inkscape_dir
àPopen
, plutôt que de changer le répertoire du processus parent.OriginalL'auteur tjb
Vous pouvez également utiliser PhantomJS pour cela (voir http://phantomjs.org/screen-capture.html)
À partir d'un shell:
Ou de python à l'aide de sélénium:
OriginalL'auteur Matt Hampton