J'ai un fichier SVG qui a une taille définie de 16x16. Lorsque j'utilise le programme de conversion d'ImageMagick pour le convertir en PNG, j'obtiens un PNG 16x16 pixels qui est beaucoup trop petit:
convert test.svg test.png
Je dois spécifier la taille de pixel du PNG de sortie. -size
semble être ignoré, le -scale
paramètre met à l'échelle le PNG après sa conversion en PNG. Le meilleur résultat obtenu jusqu'à présent en utilisant le -density
paramètre:
convert -density 1200 test.svg test.png
Mais je ne suis pas satisfait, car je veux spécifier la taille de sortie en pixels sans faire de calcul pour calculer la valeur de densité. Je veux donc faire quelque chose comme ça:
convert -setTheOutputSizeOfThePng 1024x1024 test.svg test.png
Alors, quel est le paramètre magique que je dois utiliser ici?
svg
imagemagick
png
kayahr
la source
la source
-size 1024x1024
fonctionne bien, quelle est votre version imagemagick?-resize
étire simplement l'image convertie, avec des résultats de mauvaise qualité.convert -size 1024x1024 test.svg test.png
fonctionne bien avec ImageMagick 7.0.7-0 Q16 (version actuelle dans Chocolatey repo pour Windows). Assurez-vous simplement qu'il-size
apparaît avant le nom du fichier d'entrée, sinon une image 16x16 sera mise à l'échelle pour donner un résultat flou.Réponses:
Je n'ai pas pu obtenir de bons résultats d'ImageMagick dans ce cas, mais Inkscape le fait très bien sous Linux et Windows:
Edit (mai 2020): Utilisateurs d'Inkscape 1.0, veuillez noter que les arguments de la ligne de commande ont changé:
Voici le résultat de la mise à l'échelle d'un SVG 16x16 en PNG 200x200 à l'aide de cette commande:
Juste pour référence, ma version d'Inkscape (sur Ubuntu 12.04) est:
et sur Windows 7, c'est:
la source
/Applications/Inkscape.app/Contents/Resources/bin/inkscape -z -e test.png -w 1024 -h 1024 test.svg
-background none
option de ligne de commande.Essayez svgexport :
svgexport est un simple outil de ligne de commande multiplateforme que j'ai créé pour exporter des fichiers svg en jpg et png, voir ici pour plus d'options. Pour installer svgexport, installez npm , puis exécutez:
Edit: Si vous rencontrez un problème avec la bibliothèque, veuillez le soumettre sur GitHub, merci!
la source
Ce n'est pas parfait mais ça fait l'affaire.
Fondamentalement, cela augmente le DPI suffisamment haut (utilisez simplement une supposition éclairée / sûre) pour que le redimensionnement soit effectué avec une qualité adéquate. J'essayais de trouver une solution appropriée à cela, mais après un certain temps, j'ai décidé que c'était assez bon pour mes besoins actuels.
la source
-resize 200%
n'a pas fonctionné et j'ai dû spécifier la taille en pixels.-background none
option de ligne de commande. Pour conserver le rapport d'image, vous pouvez également spécifier une seule dimension comme la-resize 200
largeur ou la-resize x200
hauteur. Voir: imagemagick.org/script/command-line-processing.php#geometry pour des options de géométrie ImageMagick exhaustives .Si vous utilisez MacOS X et rencontrez des problèmes avec la conversion d'Imagemagick, vous pouvez essayer de le réinstaller avec RSVG lib. Utilisation de HomeBrew:
Vérifiez qu'il délègue correctement:
Il devrait s'afficher
rsvg
.la source
convert ic_comment_48px.svg -size 30x30 ic_comment_30px.png
et l'image de sortie est de 48 x 48. Assurez-vous que imagemagick délègue à rsvg comme vous l'avez expliqué.convert
convertissait svg en png, mais les résultats étaient désespérés; après la réinstallation, ils sont parfaits. De plus, la conversion est nettement plus rapide.invalid option: --with-librsvg
Inkscape ne semble pas fonctionner lorsque les unités svg ne le sont pas
px
(par exemple cm). J'ai une image vierge. Peut-être que cela pourrait être corrigé en tournant le dpi, mais c'était trop gênant.Svgexport est un programme node.js et n'est donc généralement pas utile.
La conversion d'Imagemagick fonctionne correctement avec:
Si vous utilisez
-resize
, l'image est floue et le fichier est beaucoup plus volumineux.MEILLEUR
Il est le plus rapide, a le moins de dépendances et la sortie est environ 30% plus petite que convertie. Installez librsvg2-bin pour l'obtenir. Il ne semble pas y avoir de page de manuel mais vous pouvez taper:
pour obtenir de l'aide. C'est simple c'est bien.
la source
-a
paramètre doit être utilisé avec rsvg.brew install rsvg
sur OSX installe un million de choses - GDK, OpenSSL, Python, etc.brew install librsvg
et la commande de conversion l'estrsvg-convert
.rsvg-convert
dans le cas d'Arch) donnait les meilleurs résultats et les plus cohérents lors de la conversion de svgs compliqués en png. Suivi avecoptipng
pour réduire la taille du fichier de sortie.Après avoir suivi les étapes de la réponse de Jose Alban , j'ai réussi à faire fonctionner correctement ImageMagick en utilisant la commande suivante:
Le nombre 1536 provient d'une estimation approximative de la densité, voir cette réponse pour plus d'informations.
la source
Afin de redimensionner l'image, l'option
-density
doit être utilisée. Pour autant que je sache, la densité standard est de 72 et correspond à la taille 1: 1. Si vous souhaitez que le png de sortie soit deux fois plus grand que le svg d'origine, définissez la densité sur 72 * 2 = 144:la source
convert source.svg -density 144 target.png
ne redimensionnera pas l'image.convert -density 180 source.svg target.png
pourquoi ne pas essayer la ligne de commande inkscape, voici mon fichier bat pour convertir tous les svg de ce dir en png:
la source
Je suis venu à ce poste - mais je voulais juste faire la conversion par lot et rapidement sans utiliser de paramètres (en raison de plusieurs fichiers de tailles différentes).
Pour moi, les exigences étaient probablement un peu plus faciles que pour l'auteur d'origine. (Je voulais utiliser des SVG dans MS PowerPoint, mais cela ne le permet pas)
la source
brew install librsvg
et la commande de conversion estrsvg-convert
.Dans ImageMagick, on obtient un meilleur rendu SVG si on utilise Inkscape ou RSVG avec ImageMagick que son propre rendu interne MSVG / XML. RSVG est un délégué qui doit être installé avec ImageMagick. Si Inkscape est installé sur le système, ImageMagick l'utilisera automatiquement. J'utilise Inkscape dans ImageMagick ci-dessous.
Il n'y a pas de paramètre "magique" qui fera ce que vous voulez.
Mais, on peut calculer très simplement la densité exacte nécessaire pour rendre la sortie.
Voici un petit bouton 50x50 lorsqu'il est rendu à la densité par défaut de 96:
Supposons que nous voulons que la sortie soit de 500. L'entrée est de 50 à une densité par défaut de 96 (les anciennes versions d'Inkscape peuvent utiliser 92). Vous pouvez donc calculer la densité nécessaire en proportion des rapports des dimensions et des densités.
Dans ImageMagick 7, vous pouvez effectuer le calcul en ligne comme suit:
la source
Une chose qui m'a tout simplement mordu était la définition de
-density
APRÈS le nom du fichier d'entrée. Ça n'a pas marché. Le déplacer vers la première option de conversion (avant toute autre chose) l'a fait fonctionner (pour moi, YMMV, etc.).la source
Pour une conversion SVG en PNG simple, j'ai trouvé que cairosvg ( https://cairosvg.org/ ) fonctionne mieux qu'ImageMagick. Étapes d'installation et d'exécution sur tous les fichiers SVG de votre répertoire.
Ouvrez un shell python dans le répertoire qui contient vos fichiers .svg et exécutez:
Cela vous permettra également de ne pas écraser vos fichiers .svg d'origine, mais de conserver le même nom. Vous pouvez ensuite déplacer tous vos fichiers .png vers un autre répertoire avec:
la source
cairosvg
sur Ubuntu-19.04 a fait le travail pour moi.Sans librsvg, vous pouvez obtenir une image png / jpeg noire. Nous devons installer
librsvg
deconvert
fichier svg avec ImageMagick.Ubuntu
MacOS
la source
J'ai résolu ce problème en modifiant les attributs
width
etheight
de la<svg>
balise pour qu'elle corresponde à la taille de sortie souhaitée, puis en la convertissant à l'aide d'ImageMagick. Fonctionne comme un charme.Voici mon code Python, une fonction qui retournera le contenu du fichier JPG:
la source
La meilleure réponse de @ 808sound n'a pas fonctionné pour moi. Je voulais redimensionner
et j'ai
Au lieu de cela, j'ai ouvert Inkscape, puis je suis allé à
File
,Export as PNG file
et une boîte GUI est apparue qui m'a permis de définir les dimensions exactes dont j'avais besoin.Version sur
Ubuntu 16.04 Linux
:Inkscape 0.91 (September 2016)
(Cette image est d' ailleurs des packs d'actifs de Kenney.nl )
la source
Sur macOS en utilisant brew, utiliser librsvg fonctionne directement bien
De nombreuses options sont disponibles via
rsvg-convert --help
la source
Sur Linux avec Inkscape 1.0 pour convertir de svg en png, vous devez utiliser
ne pas
la source