Je souhaite convertir des images SVG en fichiers PNG avec un fond transparent et des bords anti-aliasés (en utilisant des pixels semi-transparents). Malheureusement, je ne parviens pas à obtenir l'anti-aliasing avec ImageMagick, les contours sont toujours terribles. Voici ce que j'ai essayé:
convert +antialias -background transparent in.svg -resize 25x25 out.png
Des idées ou un autre outil en ligne de commande que je pourrais utiliser?
Inkscape fera ceci:
inkscape \
--export-png=out.png --export-dpi=200 \
--export-background-opacity=0 --without-gui in.svg
En remarque, j'ai trouvé qu'il était un peu délicat d'obtenir de la transparence. Au lieu d'utiliser transparent , je devais utiliser none .
convert -background none in.svg out.png
En fait, en lisant la documentation d’imagemagick:
-antialias
Activer/désactiver le rendu des pixels anti-aliasing lors du dessin de polices et de lignes . Par défaut, les objets (texte, lignes, polygones, etc.) sont anticrénelés lors de leur dessin. Utilisation + antialias pour désactiver l'ajout de pixels antialiasing Edge. Cela réduira alors le
nombre de couleurs ajoutées à une image uniquement aux couleurs dessinées directement. C'est-à-dire non. des couleurs mélangées sont ajoutées lors du dessin de tels objets.
le + antialias désactivera en effet l'antialiasing.
La façon dont j’ai appris à faire cela s’appuyait sur la méthodologie présentée ici: Comment convertir un fichier .eps en 1024x1024 .jpg en haute qualité?
C’est la même idée que la solution de @ halfer avec inkscape
-- pour graver d’abord le DPI, mais vous pouvez accomplir la même chose avec seulement imagemagick
en utilisant l’option -density
.
convert -density 200 in.svg -resize 25x25 -transparent white out.png
J'ajoute un rect comme fond. Le CSS incorporé masque l’arrière-plan . Ensuite, j’attrape sa couleur pour définir l’attribut transparent de ImageMagick.
Fichier SVG:
<?xml version="1.0" ?>
<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
<svg
version="1.1" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
width="500px" height="500px"
viewBox="0 0 500 500"
enable-background="new 0 0 500 500"
>
<defs>
<style>
#background { display: none; }
</style>
</defs>
<rect id="background" x="0" y="0" width="500" height="500" fill="#e8e437"/>
<!-- beginning of the sketch -->
<g fill="#000" text-anchor="middle"font-size="112">
<text y="350" x="192">OK</text>
</g>
<!-- end of the sketch -->
</svg>
script bash
#!/bin/bash
BASE_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )
SVG_DIR="$BASE_DIR/import"
PNG_DIR="$BASE_DIR/export"
for f in `ls $SVG_DIR/*.svg`
do
g="$PNG_DIR/$(basename "$f" .svg).png"
BGCOLOR=`grep 'id="background"' $f \
| sed 's/.* fill="\([^"]*\)".*/\1/'`
convert $f -transparent "$BGCOLOR" $g
done