Đây là câu trả lời được chấp nhận bởi Rob W , với một sự thích ứng tầm thường để tránh phải gõ các kích thước (16, 32, v.v.) nhiều lần:
#!/bin/bash
files=()
for size in 16 32 48 128 256; do
inkscape -z -e "$size.png" -w "$size" -h "$size" logo.svg > /dev/null 2> /dev/null
files+=("$size.png")
done
convert "${files[@]}" -colors 256 favicon.ico
unlink "${files[@]}"
Dưới đây logo.svg
đại diện cho đầu vào (nguồn) hình ảnh, từ đó chúng ta tạo ra các file nhỏ hơn các kích thước mong muốn ( 16.png
, 32.png
, vv) mà chúng tôi sau đó kết hợp vào file icon đầu ra (kết quả), favicon.ico
. Bạn có thể thay đổi danh sách kích thước trong dòng 3, ví dụ: "16 24 32 48 64 72 128" và convert
lệnh sẽ tự động điều chỉnh phù hợp, bởi vì tập lệnh này sử dụng kỹ thuật được mô tả bởi G-Man trong câu trả lời của anh ấy ở đây để xây dựng một mảng tên tập tin. Và cuối cùng, chúng tôi hủy liên kết (loại bỏ) các tệp PNG được tạo trong dòng 4, sử dụng lại tên tệp.
Tôi đã nhận thấy rằng lệnh:
convert logo.svg -define icon:auto-resize=16,48,256 -compress zip favicon.ico
(tương đương với câu được trình bày trong câu trả lời của user400747 ) thực sự thu nhỏ hình ảnh bitmap (chất lượng bị mất) và lớp nền bị mất độ trong suốt.
convert
mỗi khi tôi nhìn vào nó. Cảm ơn câu trả lời!