# Imagemagick (convert): SVG to XPM

## V10lator

Hi,

ich darf gerade einen riesen Stapel SVG-Files in XPM umwandeln. Mit Gimp geht das ja auch, bei den ganzen Files jedes 2x umwandeln (einmal in 32x32, einmal in 16x16) ist mir aber doch zu umständlich.

Nun habe ich mir ein kleins Script geschrieben welche die Dateien einfach durch convert jagt. Das Problem dabei: Per default skalieren die SVGs zu 48x48.

Also suchte ich nach einer Lösung und wurde auf -density aufmerksam gemacht, musste abert nach kurzem testen feststellen das es allein überhaupt nichts bringt. Also fing ich an wild zu experimentieren und mein jetziges Ergebnis sieht so aus:

```
for item in "${FILE[@]}"; do

   ORIG="/pfad/zu/den/SVGs/$item.svg"

   TMP=$(echo $item | awk -v FS="/" '{print $2}')

   convert -density 24x24 -resample 8x8 -render "${ORIG}" "./${TMP}_16x16.xpm" &

   convert -density 48x48 -resample 32x32 -render "${ORIG}" "./${TMP}_32x32.xpm"

done
```

Dabei sind in dem Array $FILE natürlich die einzelnen Dateien gesammelt, das ist auch nicht das Problem.

Das Problem liegt darin das die Qualität (gerade der 16x16 xpms) bescheiden ist. Nehme ich testweise eine der SVGs und wandele sie mal fix in Gimp um ist die Qualität um Welten besser.

Ich denke ich mache irgendetwas grundlegend verkehrt und hoffe hier kann mir jemand erklären wie ich das nun hinbekomme.  :Smile: 

P.S. Bevor jemand fragt: Nein, ich weiß nicht mehr genau wie ich auf die Werte für density und resample gekommen bin. Ich glaube die density Werte habe ich nach irgendeiner Anleitung errechnet, da sie aber alleine nicht wirkten habe ich die passenden resample Werte durch try&error gefunden.  :Wink: 

----------

## firefly

versuchs mal nur mit der option -resize

----------

## V10lator

Gibt leider auch keine schönen Ergebnisse.

Langsam glaube ich das ImageMagick die SVG erst rastert und dann skaliert (was natürlich vollkommener quatsch ist) - auch die Ergebnisse sehen, egal was ich versuche, eig. immer gleich aus... -.-

----------

## Christian99

hm, eigentlich hab ich davon auch keine ahnung, aber wenn du das eh nur aus dem internet hast, dann lass doch das einfach weg.

Probier doch einfach mal so:

```
convert -resize 16x16 "${ORIG}" "./${TMP}_16x16.xpm" & 
```

davon abgesehen:

```
convert -density 24x24 -resample 8x8 -render "${ORIG}" "./${TMP}_16x16.xpm" & 
```

gibt bei mir 14x14 Bilder, deren Qualität (für 14x14) ganz passabel ist.

----------

## franzf

Verwende doch ein Programm, welches komplett auf svg zugeschnitten ist: inkscape!

Das kannst du auch per cmdline (oder script) auf svgs loslassen, ohne gui.

Die Ergebnisse sollten super werden  :Smile: 

----------

## V10lator

Danke für den Tipp, ich habe es gerade installiert. Leider scheint es kein xpm zu kennen.

Nunja, dann schreibe ich das Script eben so das es via inkscape pngs erstellt und convert diese dann in xpms umwandelt ^^

//EDIT: Okay, die PNGs sehen gut aus. Beim Umwandeln in XPM geht jedoch der transparente Hintergrund verloren.

```
identify test_16x16.png 

test_16x16.png PNG 16x16 16x16+0+0 8-bit DirectClass 778BB 0.000u 0:00.000
```

```
convert test_16x16.png test16x16.xpm
```

Gibt einen weißen Hintergrund,

```
convert test_16x16.png -depth 8 -bordercolor none +dither -colors 14 test_16x16.xpm
```

(irgendwie zusammengegoogelt) ergibt einen schwarzen Hintergrund.  :Sad: 

//EDIT²: Ein versuchsweises

```
convert test_16x16.png test.png
```

funktioniert jedoch. ImageMagick (er)kennt die Transparenz also. Wieso geht sie dann beim umwandeln in xpm verloren? -.-

----------

