Оскільки відповідь nacho-coloma мені допомогла, я взяв його чудовий сценарій і полегшив його використання щодня.
Спочатку:
- Створіть каталог
drawable-svg
біля вашого res
каталогу.
- Розмістіть свої файли svg та цей скрипт у
drawable-svg
.
- Зробіть сценарій виконуваним.
- Запусти його. В Ubuntu ви можете просто двічі клацнути на ньому в Nautilus і зробити так, щоб він працював у терміналі.
А пізніше, коли ви отримуєте нові файли svg:
- Помістіть нові файли svg
drawable-svg
та запустіть сценарій знову.
За замовчуванням він буде робити те , що ви хочете: масштабування кожного файлу SVG в дитячі файли і помістити їх в ../res/drawable-mdpi
, і ../res/drawable-hdpi
т.д.
Сценарій приймає два параметри:
- Шаблон файлу svg для масштабування, за замовчуванням:
*.svg
- Базовий каталог для put, за замовчуванням
../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