Un SVG a ces propriétés, qui déterminent sa taille:
width="146.91299pt"
height="78.079002pt"
viewBox="0 0 146.913 78.079"
Je voudrais mettre à l'échelle un SVG donné à une 400pt
ligne de commande avec ou sans casser le rapport d'aspect. Cela signifie que les trois valeurs ci-dessus doivent être modifiées correctement et tous les points dans le code svg suivant. Je ne veux pas changer seulement la taille de la toile, mais la taille de l'image svg entière. Et je ne veux pas le faire avec une interface graphique / à la main, mais je veux le faire avec CLI.
Comment puis-je redimensionner automatiquement un SVG par ligne de commande à une largeur donnée?
Raison: l'aperçu de Wikipédia est mauvais si l'image est trop petite. Voyez cette image comme exemple.
Comment je ferais cette tâche avec Inkscape-GUI
- Maj + Ctrl + M (Transformation)
- Échelle (cochez "échelle proportionnelle")
- Entrez la largeur
- Maj + Ctrl + D (Propriétés du document)
- Ajuster la page à la sélection
Maintenant, je veux une méthode CLI automatique pour le faire.
Soit dit en passant, inkscape a simplement appliqué
<g transform="matrix(1.6838397,0,0,1.6838397,-3.3543029,-3.3542794)"
id="surface0">
à l'image entière.
la source
width
,height
et lesviewBox
valeurs à quelque chose commewidth="100%" height="100%" viewBox="0 0 400 212.58569"
.sed
dans la réponse de @ terdon). Un problème que vous pouvez rencontrer est que les valeurs doivent être différentes de celles des autres fichiers .svg auxquels vous souhaitez faire la même chose.Réponses:
rsvg-convert
à partir dulibrsvg2-bin
package peut redimensionner les svg.Voir cette réponse pour des instructions complètes.
la source
rsvg-convert -a -w 500 -f svg Vector-triangle-inequality.svg -o Result.svg
travaillé. Mais rsvg-convert semble faire plus que redimensionner.rsvg-convert --help
ne fournit aucun indice.Si vous voulez juste changer une image, ouvrez-la dans un éditeur de texte (emacs par exemple) et changez l'entrée de largeur.
Pour une approche plus geek, CLI uniquement, utilisez sed:
Cela ne mettra cependant pas l'image à l'échelle, mais uniquement sa largeur.
Une meilleure façon, peut-être, mais certainement une qui peut être exécutée en mode batch pour de nombreuses images, utilise inkscape à partir de la ligne de commande:
Pour de nombreux fichiers (en supposant que vous souhaitiez qu'ils aient tous la même largeur), procédez comme suit. Il nécessite une conversion en png et suppose qu'il n'y a pas d'espace dans vos noms de fichiers:
La conversion d' ImageMagick a été mon premier choix, mais il semble rompre lors de la mise à l'échelle des svgs.
la source