Conversion d'images par lots SVG à la taille souhaitée PNG ou ICO


26

J'ai un tas d'icônes SVG que j'aimerais utiliser pour que mon application soit développée dans VB.Net 2010, et comme il n'a pas de support pour gérer les icônes SVG, j'ai besoin de convertir ces icônes en PNG ou ICO, avec préférence résolution de sortie. J'ai trouvé un tel outil de ligne de commande pour Ubuntu appelé rsvgconvert. Avons-nous également un tel outil pour Windows?

Réponses:


12

ImageMagick dispose d'un outil en ligne de commande disponible pour Linux et Windows (et autres). L'outil de conversion est commodément appelé "convertir". Voici une documentation d'utilisation .

Et voici où vous pouvez obtenir un programme d' installation de Windows .


Vous pouvez également l'obtenir via le sous-système Windows pour Linux (WSL), avecapt install imagemagick
antonyh

(cela s'applique à Linux, peut s'appliquer à Windows) si vous activez -verbose sur IM, il semblerait que IM utilise lui-même inkscape pour créer un fichier eps intermédiaire. donc je suggère la réponse de @ zetah
northern-bradley

Voici un petit convertisseur basé sur ImageMagick pour Windows: fosshub.com/SVG2PNG.html Il est ancien (de 2014), mais fonctionne toujours et vous n'avez pas besoin de lire de documents.
8day

20

ImageMagick ne doit pas s'associer immédiatement à n'importe quelle tâche par lots impliquant des images. Surtout dans ce cas où ImageMagick est une mauvaise solution pour la conversion SVG.

Mieux vaut essayer Inkscape en ligne de commande:

inkscape in.svg --export-png=out.png


8
Pourquoi dites-vous que Inkscape est meilleur qu'ImageMagick? Je ne suis pas en désaccord (ou d'accord), juste curieux de plus de détails.
Sam

La raison d'être imageMagick est mieux adaptée pour gérer les png, jpg, etc. tandis que inkscape est mieux adapté pour gérer les images vectorielles (svg)
user93

1
En l'état, cela ne répond pas à la question de la conversion par lots , n'est-ce pas?
OR Mapper du

Pendant que la réponse fonctionne, sur Windows InkScape insiste pour afficher un écran de démarrage avec prise de focus avec un retard, ce qui rend impossible l'exécution en mode batch en arrière-plan.
Timwi

@Timwi Cela ne se produit pas ici. N'oubliez pas d'utiliser l' -zoption.
Svish

5

La ligne de commande n'a pas fonctionné, et je voulais que 100 fichiers soient convertis. Voici comment je l'ai fait fonctionner avec Windows 7:

  1. installez inkscape - pas le portable!

  2. copiez tous vos fichiers svg dans un dossier, par exemple "C: \ svgs \" là:

  3. vous créez un convert.batfichier avec cette ligne à l'intérieur:

    FOR %%A IN (*.svg) DO "C:\Program Files (x86)\Inkscape\inkscape.exe" --export-png=%%A.png
    

    (pointez sur le bon dossier de votre installation):

  4. ouvrez le CMD en tant qu'administrateur! Pour ce faire, appuyez sur la touche WIN, tapez cmd, faites un clic droit sur "cmd.exe" et sélectionnez "Exécuter en tant qu'administrateur".

  5. accédez à votre "C: \ svgs \" et tapez convert.bat - Tous les fichiers svg seront convertis en PNG.

  6. Utilisez l'Explorateur Windows pour rechercher les fichiers PNG convertis. Sur mon PC, ils étaient dans le dossier:C:\Users\myname\AppData\Local\VirtualStore\Program Files (x86)\Inkscape\svgs

J'espère que ça t'as aidé.


Comme la résolution de la ligne de commande ne pouvait être fixée que pour autant que je puisse voir, j'ai fini par utiliser l' outil InkscapeBatch . Là, je pouvais régler le DPI pour augmenter toutes les images relativement.

Vous devez spécifier les paramètres corrects ou cela ne fonctionnera pas. Voici ce que j'ai fait:

entrez la description de l'image ici

entrez la description de l'image ici

Après avoir cliqué sur "Terminer", vous devez appuyer sur le bouton "Démarrer le convertisseur de lots ..." dans la barre d'outils:

entrez la description de l'image ici


1
Votre commande batch en manque probablement un autre %%A(comme nom de fichier d'entrée). Aussi, pourquoi supposez-vous que cela ne devrait fonctionner qu'en mode administrateur?
OR Mapper du

Alors, comment est-ce mieux que d'utiliser ImageMagick?
reinierpost

Malheureusement, ce lien semble également être mort. (août 2017)
Idéogramme

@Ideogram J'ai trouvé un autre fournisseur de téléchargement. softsea.com/download/InkscapeBatch.html
Kai Noack

pour spécifier le dpi, vous devez ajouter cette option --export-dpi=100où 100 est la valeur du dpi
Xsmael


3

Pour la conversion SVG en PNG, j'ai trouvé que cairosvg ( https://cairosvg.org/ ) fonctionne mieux que ImageMagick. Étapes d'installation et d'exécution sur tous les fichiers de votre répertoire.

pip3 install cairosvg

Ouvrez un shell python dans le répertoire qui contient vos fichiers .svg et exécutez:

import os

for file in os.listdir('.'):
    name = file.split('.svg')[0]
    cairosvg.svg2png(url=name+'.svg',write_to=name+'.png') 

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:

$ mv *.png [new directory]

Cette réponse est la seule qui a fonctionné pour mon fichier SVG plutôt volumineux, merci !!!
Ben Sandeen

1

Après avoir lutté avec cela pendant près de 2 heures, je me suis installé avec Inkscape. Depuis que j'avais besoin de convertir par lots un tas de fichiers dans de nombreuses résolutions différentes, j'ai créé un script Powershell. Avec 106 SVG, mon ordinateur s'est bloqué pendant environ 5 secondes, alors soyez prudent lorsque vous l'utilisez.

# ENTER THE FULL PATH TO THE INKSCAPE EXECUTABLE
$inkscapeExe = "C:\Program Files\Inkscape\inkscape.exe"
# ENTER THE PATH TO THE FOLDER CONTAINING THE SVGs
$svgFolder = "C:\Images\SVG"
# ENTER THE DESIRED WIDTH
$width = 120
# ENTER THE DESIRED HEIGHT
$height = 120

$svgFiles = Get-ChildItem $svgFolder -Filter *.svg
foreach ($svgFile in $svgFiles)
{
    $inputParam  = $svgFile.FullName 
    $outputParam = "--export-png=" + $svgFile.FullName + "-" + $width + "x" + $height + ".png" 
    $widthParam  = "-w" + $width
    $heightParam = "-h" + $height

    & $inkscapeExe $inputParam $outputParam $widthParam $heightParam
}

Le mien a gelé pendant plus de quelques secondes. L' &opérateur démarre un nouveau processus et continue immédiatement, donc ce script créera autant de nouveaux processus inkscape.exe que vous avez de fichiers svg. Il s'avère que cela rend votre ordinateur assez lent pendant un certain temps.
Rory

Si vous mettez | Out-Nullà la fin de la ligne qui commence par &cela le forcera à exécuter la commande inkscape.exe une à la fois, ce qui fonctionne beaucoup mieux pour moi.
Rory

1

Vous pouvez utiliser ce qui suit dans Bash / Ubuntu pour Windows, dans le dossier où vous avez les SVG. Il semble cependant qu'ImageMagick rasterise d'abord puis redimensionne, ce qui se traduit par d'étranges artefacts…

find -name "*.svg" -exec convert {} -background none -density 300 -resize 256x256 -define icon:auto-resize -alpha remove -colors 256 {}.ico \;

Voir également la solution basée sur Inscape qui semble bien fonctionner (depuis un autre thread, lien perdu): mkdir temp; declare -a res=(16 24 32 48 64 128 256); for f in *.svg; do for r in "${res[@]}"; do inkscape -z -e temp/${f}${r}.png -w $r -h $r $f; done; resm=( "${res[@]/#/temp/$f}" ); resm=( "${resm[@]/%/.png}" ); convert "${resm[@]}" ${f%%.*}.ico; done; rm -rf temp;


1
+1 Je l'ai utilisé avec inkscape dans une version très simplifiée find -name "*.svg" -exec inkscape {} -e {}.png \;Bien que je préfère cette version: ls | grep ".svg" | xargs -I file inkscape file -e file.pngparce que les fichiers sont traités par ordre alphabétique - ce n'est pas le cas lors de l'utilisationfind
loves.by.Jesus


0

Je ne pouvais pas trouver une seule commande qui fonctionnait pour exécuter un lot, donc je l'ai fait fonctionner en générant une liste de fichiers et en créant une série de commandes. Ces instructions devraient fonctionner pour toutes les versions de Windows. Toutes les instructions de frappe excluent les citations et incluent tout le reste.

Pour ce faire, vous aurez besoin d'Inkscape, de MS Excel ou d'un éditeur de feuille de calcul comparable et d'un générateur de liste. Il y a un excellent petit générateur de liste de freeware ici: https://www.portablefreeware.com/?id=1171

  • Lien physique, copiez ou déplacez tous les fichiers svg dans un dossier.
  • Générez une liste de fichiers de ce dossier et exportez vers csv.
  • Ouvrez le fichier csv dans Excel et supprimez toutes les colonnes sauf la colonne du nom de fichier. Supprimez également les en-têtes de colonne comme [Chemin] et le texte de résumé en bas.
  • Si les noms de fichiers ne figurent pas déjà dans la deuxième colonne, coupez-les et collez-les.
  • Dans la première cellule de la première colonne, tapez inkscape suivi d'un espace et du chemin du dossier où vos fichiers svg incluent une barre oblique inverse (par exemple "inkscape C: \ SVG \"). Copiez ensuite cette cellule, sélectionnez toutes les cellules en dessous qui précèdent un nom de fichier et collez-les afin qu'elles aient toutes le même texte.
  • Dans la troisième colonne, tapez --export-png = dans la première cellule, suivi du dossier de destination dans lequel vous souhaitez les enregistrer. Je viens d'utiliser le même dossier. Pour que la syntaxe soit correcte, assurez-vous d'ajouter un espace au début mais gardez le reste du texte ensemble (par exemple "--export-png = C: \ PNG \"). Copiez et collez cela pour toutes les lignes, tout comme la première colonne
  • Copiez toute la deuxième colonne et collez-la dans la quatrième colonne. Avec cette quatrième colonne sélectionnée Appuyez sur Ctrl + H (Rechercher et remplacer). Dans le champ de recherche, tapez ".svg" Dans le champ de remplacement, tapez ".png", puis sélectionnez Remplacer tout.

Si vous l'avez fait correctement, vous devez avoir une ligne pour chaque nom de fichier qui ressemble à ceci: | inkscape C: \ SVG \ | Filename1.svg | --export-png = C: \ PNG \ | Filename1.png |

  • Dans la première cellule de la cinquième colonne, tapez "= concaténer (a2, b2, c2, d2)". Cela suppose que la colonne d'en-tête n'a pas été supprimée. Les numéros de cellule entre parenthèses doivent correspondre au numéro de ligne actuel. Si votre premier nom de fichier est en B2, la formule ci-dessus est exacte. Sinon, les noms de cellule entre parenthèses correspondent à la première ligne du nom de fichier (par exemple a1, b1, c1 ...)
  • Copiez et collez cette cellule pour la remplir en dessous, tout comme les colonnes 1 et 3.
  • Copiez maintenant cette cinquième colonne entière et utilisez Collage spécial> Valeurs pour coller le texte produit par les formules dans la sixième colonne. Cette sixième colonne est votre tir d'argent. Copiez la sixième colonne entière, ouvrez le bloc-notes et collez-y la dernière colonne. Si vous l'avez fait correctement, vous aurez une ligne de commande pour convertir chacun de vos fichiers svg en pngs.
  • Enregistrez le fichier Bloc-notes dans le répertoire Inkscape en tant que fichier de commandes. Lorsque la fenêtre d'enregistrement sous s'ouvre, changez le type d'enregistrement sous en "Tous les fichiers" et enregistrez-le en tant que fichier .bat (par exemple "C: \ Program Files \ Inkscape \ SVGBatch.bat"
  • Il ne vous reste plus qu'à aller dans ce dossier et à double-cliquer sur le fichier batch que vous venez d'enregistrer. Il devrait ouvrir une invite de commande et convertir tous les fichiers.

J'espère que cela rend la vie de quelqu'un plus facile. James


0

La réponse de Kai est proche, mais n'a pas fonctionné pour moi. Cependant, avec quelques ajustements légers, cela a fonctionné parfaitement la première fois:

  1. Copiez vos SVG dans un emplacement pratique
  2. Créez un fichier texte dans le même dossier et renommez-le convert.bat
  3. Ouvrez convert.batdans votre éditeur de texte / code préféré et entrez ce qui suit:

FOR %%A IN (*.svg) DO "C:\Program Files\Inkscape\inkscape.exe" %%A --export-png=%%A.png

(Notez que l' inkscape.exeemplacement doit correspondre à l'emplacement du programme exécutable sur votre PC; et le second avant --export-pngest %%A- c'est le fichier SVG en cours de conversion)

  1. Double-cliquez convert.batpour exécuter et cela devrait faire écho aux résultats des conversions.

Notez que vous devrez peut-être actualiser votre dossier Windows pour voir les nouveaux fichiers, mais ils devraient tous avoir été créés au même emplacement que les SVG d'origine.


0

Impossible de faire fonctionner imagemagick ou inkscape pour moi pour une raison quelconque. Je n'avais que 12 fichiers à convertir, je viens d'utiliser ce site manuellement: http://svgtopng.com/ a fonctionné un régal.


0

Voici une solution basée sur ImageMagick pour convertir tous les fichiers svg d'un répertoire donné en fichiers ico:

mogrify -format ico -density 1200 -background transparent -trim -resize 256x256 -gravity center -extent 256x256 -define icon:auto-resize *.svg

Explication:

  • mogrify: Comme convert, mais vous permet de traiter plusieurs fichiers par lots.
  • -format ico: Notre format de fichier cible. Crée des .icofichiers au lieu d'écraser le fichier d'origine (comme le ferait mogrify par défaut).
  • -density 1200: Étant donné que nous ne pouvons pas spécifier une taille de pixel cible à laquelle ImageMagick devrait pixelliser le SVG (il pixelliserait d'abord avec une densité par défaut puis à l'échelle), nous pixellisons le SVG avec une résolution incroyablement élevée (1200 dpi), pour garantir que l'image sera réduite à 256x256 au lieu d' échelle .
  • -background transparent: L'arrière-plan sera rendu transparent.
  • -trim: Supprimer la bordure existante autour de l'image.
  • -resize 256x256: Redimensionnez l'image en vous assurant que le côté le plus long a 256 pixels, tout en conservant le rapport hauteur / largeur.
  • -gravity center -extent 256x256: Agrandissez le canevas, en vous assurant que le côté court dispose également de 256 pixels. L'image existante est alignée au centre. Ceci est nécessaire car nous avons besoin d'une image carrée comme base pour un fichier ICO.
  • -define icon:auto-resize: Incluez non seulement l'image 256x256 mais aussi toutes les résolutions recommandées à l'échelle réduite (par exemple 32x32) dans le fichier ICO.

0

La plupart des réponses données ici ignorent la partie à la taille souhaitée de la question. Je n'ai pas pu obtenir de résultats satisfaisants en utilisantconvert "mise à l'échelle" d'un SVG. inkscapefait un meilleur travail et préserve également la transparence de l'arrière-plan.

Selon votre cas d'utilisation, utilisez l'une des options suivantes:

  1. exporter au DPI spécifié: inscape in.svg -d 300 -e out.png
  2. exporter à la largeur spécifiée (en conservant les proportions): inscape in.svg -w 800 -e output.png
  3. exporter à la hauteur spécifiée (en conservant le rapport hauteur / largeur): inscape in.svg -h 600 -e output.png

Notez que la spécification de la largeur et de la hauteur ne préserve pas le rapport / largeur.

Pour convertir plusieurs fichiers à la fois, ajustez les éléments suivants à votre cas d'utilisation (dans bashou compatible):

for f in *.svg; do
  inkscape $f -d 300 -e ${f%.*}.png
done
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.