J'ai un fichier SVG qui contient au moins une image JPG / PNG intégrée à l'intérieur. Je veux extraire les images JPG / PNG de ce fichier SVG et les enregistrer sur le disque.
J'ajoute la inkscape
balise car c'est le programme que j'utilise pour éditer les fichiers SVG, mais j'accepte également les solutions utilisant d'autres outils.
xml.etree
bibliothèque intégrée.Réponses:
Ma propre solution (ou ... solution de contournement):
XML Editor
( Shift+ Ctrl+ X)xlink:href
attribut, qui contiendra l'image en tant que données: URIdata:
URI entierdata:
URI dans un navigateur et enregistrez-le à partir de là.Alternativement, je peux ouvrir le fichier SVG dans n'importe quel éditeur de texte, localiser l'
data:
URI et le copier à partir de là.Bien que cette solution fonctionne, elle est un peu lourde et j'aimerais en apprendre une meilleure.
la source
Il y a une meilleure solution à la place:
aller à
Extensions -> Images -> Extract Image...
, là, vous pouvez enregistrer l'image raster sélectionnée sous forme de fichier. Cependant, cette extension fonctionne bizarrement et fonctionne en quelque sorte assez lentement (mais parfaitement bien).Autre remarque: cette extension est encombrante et meurt silencieusement sur des images grandes et variées. De plus, avec un grand nombre d'images raster, cela peut augmenter l'utilisation de la mémoire d'Inkscape à des niveaux horribles (comme 3 Go après seulement une poignée d'images extraites).
Parce que j'ai environ 20 fichiers svg avec environ 70 images raster chacune, chaque image d'au moins 1 Mo, j'avais besoin d'une solution différente. Après une courte vérification à l'aide de la pointe Denilson Sá, j'ai conçu le script php suivant, qui extrait les images des fichiers svg:
De cette façon, je peux obtenir toutes les images que je veux et md5 m'évite d'obtenir des images répétées.
Je parie qu'il doit y avoir un autre moyen beaucoup plus simple, mais c'est aux développeurs d'Inkscape de le faire mieux.
la source
data:
URL par ligne et ne prend pas en charge les sauts de ligne à l'intérieur de l'attribut href (inkscape les ajoute pour les URL de données et la spécification base64 exige même que les lignes ne dépassent pas 76 caractères ). Joli script pour un hack rapide, mais il ne fonctionne pas avec toutes sortes de SVG.Enfin, des années plus tard, j'ai écrit un script pour extraire correctement toutes les images d'un fichier SVG, en utilisant une bibliothèque XML appropriée pour analyser le code SVG.
http://bitbucket.org/denilsonsa/small_scripts/src/tip/extract_embedded_images_from_svg.py
Ce script est écrit pour Python 2.7 mais devrait être assez facile à convertir en Python 3. Encore mieux, environ 50 lignes peuvent être supprimées après la conversion en Python 3.4, en raison des nouvelles fonctionnalités introduites dans cette version.
la source
cElementTree
est censé être plus rapide. Mais peut-être que quelque chose comme Sax fonctionne mieux aussi.cElementTree
est probablement plus rapide. Cependant, sur Python 3.3, les deux sont identiques . À un moment donné, je mettrai probablement à jour ce script en Python 3.Encore une autre solution de contournement, vous pouvez enregistrer au format PDF, puis ouvrir ce document avec Inkscape.
Décochez "incorporer des images", et bingo, tous les pngs / jpeg seront rejetés dans votre répertoire personnel.
Désordonné, mais plus rapide que de se moquer des données: URL.
la source
J'améliore le script php-de @Johnny_Bit . La nouvelle version du script peut utiliser svg avec de nouvelles lignes. Il extrait plusieurs images sous forme de fichier svg et les enregistre dans des fichiers png externes. Les fichiers svg et png sont dans le répertoire 'svg', mais vous pouvez le changer dans la constante 'SVG_DIR'.
la source
Ouvrez votre fichier dans Inkscape et sélectionnez le bitmap que vous souhaitez exporter. Cliquez sur Fichier-> Exporter le bitmap (Ctrl + Shift + E) et il devrait exporter uniquement le bitmap sélectionné.
la source