自从nacho-coloma的回答对我有所帮助以来,我就采用了他的出色脚本并将其日常使用变得更加简单。
第一:
- 在目录
drawable-svg
旁边创建res
目录。
- 将您的svg文件和此脚本放入中
drawable-svg
。
- 使脚本可执行。
- 运行。在Ubuntu中,您只需在Nautilus中双击它并使其在终端中运行即可。
然后,当您获得新的svg文件时:
- 放入新的svg文件,
drawable-svg
然后再次运行脚本。
默认情况下,它将执行您想要的操作:将每个svg文件缩放为png文件,并将其放入../res/drawable-mdpi
,../res/drawable-hdpi
等等。
该脚本有两个参数:
- 要缩放的svg文件模式,默认为:
*.svg
- 放置默认的基本目录
../res/
(即res
具有上述设置的目录)。
您可以通过将单个svg缩放为当前目录中的png来进行实验,如下所示:
$ ./svg2png test.svg .
或者简单地处理所有图像:
$ ./svg2png
我想您可以将其drawable-svg
放置在res目录中,但是我没有研究最终APK中包含的内容。另外,我的svg文件带有-
名称,而Android则不喜欢,我的脚本负责将png文件重命名为Android上有效的名称。
我正在使用ImageMagick进行转换,这比Inkscape稍微更标准(尽管我喜欢这种方法)。两种方法都包含在脚本中以供参考。
这是脚本:
#!/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