Vì câu trả lời của nacho-coloma đã giúp tôi, tôi đã lấy kịch bản xuất sắc của anh ấy và làm cho nó dễ dàng hơn một chút để sử dụng hàng ngày.
Đầu tiên:
- Tạo thư mục
drawable-svg
bên cạnh thư mục của bạn res
.
- Đặt các tệp svg của bạn và tập lệnh này vào
drawable-svg
.
- Làm cho tập lệnh có thể thực thi được.
- Chạy nó. Trong Ubuntu, bạn chỉ cần nhấp đúp vào nó trong Nautilus và làm cho nó chạy trong một thiết bị đầu cuối.
Và sau này khi bạn nhận được các tệp svg mới:
- Đặt các tệp svg mới vào
drawable-svg
và chạy lại tập lệnh.
Theo mặc định, nó sẽ làm những gì bạn muốn: Chia tỷ lệ mọi tệp svg thành tệp png và đưa chúng vào ../res/drawable-mdpi
, ../res/drawable-hdpi
v.v.
Tập lệnh có hai tham số:
- Mẫu tệp svg để chia tỷ lệ, mặc định:
*.svg
- Thư mục cơ sở cho put, default
../res/
(tức là res
thư mục của bạn với thiết lập được đề cập ở trên).
Bạn có thể thử nghiệm bằng cách chia tỷ lệ một svg thành pngs trong thư mục hiện tại như sau:
$ ./svg2png test.svg .
Hoặc chỉ cần xử lý tất cả các hình ảnh:
$ ./svg2png
Tôi đoán bạn có thể đặt drawable-svg
bên trong thư mục res, nhưng tôi chưa xem xét những gì được bao bọc trong APK cuối cùng. Ngoài ra, các tệp svg của tôi có -
tên của chúng, điều mà Android không thích và tập lệnh của tôi sẽ chăm sóc đổi tên các tệp png thành một thứ hợp lệ trên Android.
Tôi đang sử dụng ImageMagick cho việc chuyển đổi hơi tiêu chuẩn hơn Inkscape (mặc dù tôi thích cách tiếp cận). Cả hai phương pháp đều có trong script để tham khảo.
Đây là kịch bản:
#!/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