Dans Inkscape, redimensionnez simultanément le document et son contenu

25

J'ai du mal à faire quelque chose qui semble assez basique:

Dans Inkscape, comment puis-je redimensionner le document et son contenu (c'est-à-dire les dessins) en même temps?

Un peu de contexte: je veux redimensionner un assez grand nombre de documents SVG de The Noun Project (ce sont généralement des documents 100x100px) sans avoir à redimensionner explicitement les dessins réels.

NB: S'il existe une solution en ligne de commande, je peux aussi travailler avec!

julien_c
la source
Je ne suis pas sûr de votre objectif final, mais AFAIK, la zone de document est quelque peu arbitraire en dehors de l'impression, où vous avez la possibilité d'imprimer uniquement la zone de document. Cependant, vous ne pouvez également imprimer que la zone de l'objet, ce qui peut être un moyen de contourner votre obstacle.
DA01
@ DA01 Eh bien, je pense que le document est assez utile lorsque vous exportez vers Bitmap (ce que je fais).
julien_c
Soit dit en passant, existe-t-il un moyen de redimensionner un objet qui n'implique pas de faire glisser les coins, mais où vous spécifieriez explicitement une taille? C'est peut-être ce que je recherche :)
julien_c
1
même alors, c'est une option arbitraire. Vous pouvez tout aussi facilement dessiner une boîte contenant que votre «zone» d'exportation. En fait, c'est comme ça que je préfère habituellement le faire. En ce qui concerne le redimensionnement, vous pouvez sélectionner vos objets, puis soit a) utiliser la barre d'état en haut et saisir vos changements de taille ou b) aller dans OBJET> TRANSFORMER et entrer des valeurs dans la palette Transform
DA01
@julien_c: Je pense que le point ici est que les objets sont des images vectorielles droites et n'ont aucune taille en soi jusqu'à ce que vous les exportiez vers un périphérique raster (ou fichier). Leur taille (pouces, pixels, coudées) est, en effet, hors de propos.
horatio

Réponses:

24

Vous n'avez pas mentionné le système d'exploitation que vous utilisez. J'utilise Ubuntu et j'ai pu utiliser librsvg2 avec succès.

Si vous avez accès à Ubuntu, voici ce que vous pouvez faire. Tout d'abord, installez librsvg2:

sudo apt-get install librsvg2-bin

Ensuite, cddans le répertoire contenant vos SVG (assurez-vous qu'il ne contient que des SVG!) Et utilisez une commande comme celle-ci:

for old in *; do
    new="$(echo "$old" | sed -e 's/svg$/new.svg/')"
    rsvg-convert "$old" -w 160 -h 160 -f svg -o "$new"
done

Cela va créer un nouveau lot de SVG avec des dimensions 200px par 200px, et enregistré en tant que "nom-de-fichier-original.new.svg"

Le calcul des dimensions est quelque peu déroutant. Pour convertir SVG en SVG, vous devez faire un peu de calcul. Les options "hauteur" et "largeur" ​​dans rsvg-convert utilisent pt, pas px, dans de tels cas, utilisez donc 80 si vous voulez 100px, 120 si vous voulez 150px et ainsi de suite.

Vous pouvez également utiliser rsvg-convert pour générer des fichiers PNG. Il est bien meilleur pour pixelliser le fichier que ImageMagick, du moins d'après mon expérience. Notez que vous devez passer -fà png, vous devez modifier le modèle d'enregistrement de sortie de 's/svg$/new.svg/'à 's/svg$/png/', et vous entrez la largeur et la hauteur souhaitées comme valeurs de pixels.

for old in *; do
    new="$(echo "$old" | sed -e 's/svg$/png/')"
    rsvg-convert "$old" -w 200 -h 200 -f png -o "$new"
done
Ananda Mahto
la source
Soit dit en passant, je suppose simplement que vous devez le faire en mode batch pour un grand nombre de SVG. Sinon, vous pouvez toujours utiliser le rsvg-convertcomme tel: rsvg-convert noun_project_1576.svg -w 320 -h 160 -f svg -o noun_project_1576-skewed.svgqui prendra un fichier source nommé "noun_project_1576" et l'inclinera à 400px par 200px et le renommera "noun_project_1576-skewed".
Ananda Mahto
@julien_c, juste pour le suivi: avez-vous essayé cette suggestion et avez-vous eu de la chance?
Ananda Mahto
Copiez et collez le code dans le terminal, mais renvoyez sed: -e expression # 1, char 14: commande de unterminted 's Argument manquant pour -o ... Toutes suggestions
raphie
J'ai changé `en" et maintenant je reçois une erreur lors de l'enregistrement dans le fichier: echo svgfile.svg | sed -e 's / svg $ / 2.svg'
raphie
Génial - ce sera encore mieux quand librsvgle bug du texte en flux sera corrigé ...
Joce
7

Il n'existe actuellement aucun moyen natif de le faire dans Inkscape. La seule façon consiste à redimensionner le contenu et le document séparément.

julien_c
la source
2

Bien qu'il existe plusieurs façons de le faire - comme indiqué ici - une façon qui peut très bien fonctionner est d'utiliser a viewBox. Vous modifiez simplement le contenu de la balise SVG comme ceci:

<svg
 width="1280"
 height="800"
 viewBox="0 0 1280 800">
    <!-- More markup... --!>
</svg>

Ce viewBoxqu'il fait, c'est qu'il définit un système de coordonnées internes pour le document. Vous pouvez ensuite facilement mettre à l'échelle le document en modifiant simplement les attributs widthet heightsi nécessaire.

Notez cependant qu'il y a quelques inconvénients. D'une part, il n'y a que certains contextes dans lesquels cela fonctionne, en particulier si vous incluez directement le document SVG dans votre page de balisage. L'utilisation d'une <img>balise avec cela peut ou non produire des résultats inattendus. Vous devrez effectuer certaines de vos propres recherches pour déterminer la meilleure façon de procéder.

Andrew Gray
la source
2
Cela ne fonctionne pas pour moi et je ne comprends pas pourquoi. Si je modifie la largeur et la hauteur mais que je laisse la viewBox telle quelle: Lorsque Chrome rend le fichier svg brut, il ne montre qu'une petite partie du contenu. Quand Inkscape le rend, il montre tout le contenu, mais c'est beaucoup plus grand que la page, qui est la même petite portion (en haut à gauche) que Chrome a montrée. Donc, tout à fait: le contenu n'est pas mis à l'échelle en fonction des coordonnées de la fenêtre d'affichage. Mon SVG contient plusieurs éléments SVG enfants, mais ils sont tous transformés en fonction (je suppose) des coordonnées de la zone de visualisation.
CPBL
A travaillé pour moi dans Inkscape 0.92.3, Firefox 66 et Chromium 73.
Socowi