Da mir die Antwort von Nacho-Coloma geholfen hat, habe ich sein ausgezeichnetes Skript genommen und es etwas einfacher gemacht, es täglich zu verwenden.
Zuerst:
- Erstellen Sie ein Verzeichnis
drawable-svg
neben Ihrem res
Verzeichnis.
- Platzieren Sie Ihre SVG-Dateien und dieses Skript in
drawable-svg
.
- Machen Sie das Skript ausführbar.
- Starte es. In Ubuntu können Sie einfach in Nautilus darauf doppelklicken und es in einem Terminal ausführen.
Und später, wenn Sie neue SVG-Dateien erhalten:
- Legen Sie neue SVG-Dateien ab
drawable-svg
und führen Sie das Skript erneut aus.
Standardmäßig wird es tun , was Sie wollen: Skalieren jede svg - Datei in PNG - Dateien und steckt sie in ../res/drawable-mdpi
, ../res/drawable-hdpi
usw.
Das Skript akzeptiert zwei Parameter:
- Das zu skalierende SVG-Dateimuster, Standard:
*.svg
- Das Basisverzeichnis für put, Standard
../res/
(dh Ihr res
Verzeichnis mit dem oben genannten Setup).
Sie können experimentieren, indem Sie eine einzelne SVG-Datei im aktuellen Verzeichnis wie folgt in PNGs skalieren:
$ ./svg2png test.svg .
Oder verarbeiten Sie einfach alle Bilder:
$ ./svg2png
Ich denke, Sie könnten das drawable-svg
in das res-Verzeichnis einfügen, aber ich habe nicht untersucht, was in der endgültigen APK verpackt wird. Außerdem haben meine SVG-Dateien -
Namen, die Android nicht mag, und mein Skript kümmert sich darum, die PNG-Dateien in etwas umzubenennen, das unter Android gültig ist.
Ich verwende ImageMagick für die Konvertierung, die etwas standardmäßiger ist als Inkscape (obwohl mir der Ansatz gefallen hat). Beide Methoden sind als Referenz im Skript enthalten.
Hier ist das Skript:
#!/bin/bash
scalesvg ()
{
svgfile="$1"
pngdir="$2"
pngscale="$3"
qualifier="$4"
svgwidthxheight=$(identify "$svgfile" | cut -d ' ' -f 3)
svgwidth=${svgwidthxheight%x*}
svgheight=${svgwidthxheight#*x}
pngfile="$(basename $svgfile)"
pngfile="${pngfile/.svg/.png}"
pngfile="${pngfile/[^A-Za-z0-9._]/_}"
pngfile="$pngdir/$qualifier/$pngfile"
if [ ! -d $(dirname "$pngfile") ]; then
echo "WARNING: Output directory does not exist: $(dirname "$pngfile")"
echo "Outputting here instead: $pngfile"
pngfile="$qualifier-${svgfile/.svg/.png}"
fi
pngwidth=$(echo "scale=0; $svgwidth*$pngscale" | bc -l)
pngheight=$(echo "scale=0; $svgheight*$pngscale" | bc -l)
pngdensity=$(echo "scale=0; 72*$pngscale" | bc -l)
echo "$svgfile ${svgwidth}×${svgheight}px -> $pngfile ${pngwidth}×${pngheight}px @ $pngdensity dpi"
convert -background transparent -density $pngdensity "$svgfile" "$pngfile"
}
svgfiles="$1"
svgfiles="${svgfiles:=*.svg}"
pngdir="$2"
pngdir="${pngdir:=../res}"
for svgfile in $svgfiles; do
echo "Scaling $svgfile ..."
scalesvg "$svgfile" "$pngdir" 0.75 drawable-ldpi
scalesvg "$svgfile" "$pngdir" 1 drawable-mdpi
scalesvg "$svgfile" "$pngdir" 1.5 drawable-hdpi
scalesvg "$svgfile" "$pngdir" 2 drawable-xhdpi
scalesvg "$svgfile" "$pngdir" 3 drawable-xxhdpi
scalesvg "$svgfile" "$pngdir" 4 drawable-xxxhdpi
done
echo -n "Done."
read