Bagaimana cara mengubah SVG persegi ke ICO semua ukuran?


24

Saya telah menggambar ikon di InkScape dan ingin mengekspornya ke file ICO yang akan menyertakan sprite untuk semua resolusi yang masuk akal (16x16, 32x32, ... 256x256 dll). Bagaimana ini bisa dilakukan (tanpa menggunakan perangkat lunak besar dan mahal seperti Photoshop, CorelDraw dll)?


2
Pencarian cepat memberi tahu saya bahwa tidak ada cara untuk mengekspor bahkan satu pun ICO dari InkScape, tetapi ada banyak saran tentang cara melakukannya dengan perangkat lunak bebas-bebas tambahan seperti GIMP. Apakah Anda memeriksa opsi itu? Jika mereka tidak bekerja untuk Anda, dapatkah Anda memberi tahu alasannya?
usr2564301

@RadLexus yang saya coba adalah sejumlah alat online dan semuanya, sejauh yang saya mengerti, berarti membuat ICOns ukuran tunggal.
Ivan

5
Jadi Anda ingin tahu cara membuat ICO multi-ukuran? Coba opsi dalam jawaban Stack Overflow ini: stackoverflow.com/questions/4354617/… (sekali lagi, ditemukan oleh permintaan Google sederhana ...).
usr2564301

1
Ada ekstensi Inkscape yang tampaknya diekspor sebagai file ico , tetapi saya tidak punya waktu saat ini untuk mencoba jika itu berfungsi.
Paolo Gibellini

Jika Anda menemukan salah satu di bawah ini untuk menjawab pertanyaan Anda, harap tandai sebagai jawaban yang diterima.
DᴀʀᴛʜVᴀᴅᴇʀ

Jawaban:


24

Anda dapat menggunakan ImageMagick segera:

convert -density 384 icon.svg -define icon:auto-resize icon.ico

3
Mengapa kepadatan itu?
naught101

1
Saya tidak tahu, saya hanya menyalin ini dari tempat lain.
heltonbiker

@ naught101 inilah dokumentasi untuk flag densitas - walaupun, sepertinya ini adalah langkah yang tidak perlu kecuali Anda melakukan sesuatu yang sangat spesifik dengan ukuran gambar, dpi, dan rasterisasi gambar menengahnya. imagemagick.org/script/command-line-options.php#density
CreationTribe

7
Gunakan convert -background none icon.svg -define icon:auto-resize icon.icountuk menjaga latar belakang transparan.
Robert Hume

2
magick convert -background none icon.svg -define icon:auto-resize icon.icobekerja untukku.
intotecho

15

Solusi baris perintah:

1) Ekspor SVG Anda ke PNG dengan InkScape

2) Ubah ukuran gambar PNG ini ke ukuran yang Anda inginkan dengan ImageMagick:

magick convert master.png -resize 16x16 16.png
magick convert master.png -resize 32x32 32.png
magick convert master.png -resize 48x48 48.png

3) Konversi gambar PNG ke ICO:

magick convert 16.png 32.png 48.png icon.ico

4) Pastikan ICO Anda berisi semuanya:

identify icon.ico
icon.ico[1] ICO 16x16 16x16+0+0 32-bit sRGB 21.2KB 0.000u 0:00.000
icon.ico[0] ICO 32x32 32x32+0+0 32-bit sRGB 21.2KB 0.000u 0:00.000
icon.ico[0] ICO 48x48 48x48+0+0 32-bit sRGB 21.2KB 0.000u 0:00.000

Anda juga dapat menggunakan file batch atau shell sederhana untuk menyederhanakan pekerjaan.
Paolo Gibellini

3
Bukankah lebih baik (bahkan jika sedikit lebih rumit) untuk mengekspor banyak ukuran png langsung dari SVG daripada mengubah ukuran PNG yang sudah dirasterisasi?
Heltonbiker

1
Kalau-kalau ada orang lain yang penasaran, "..." tidak harfiah. Ini mewakili ukuran file png lain untuk menjejalkan ke file favicon.ico.
Nostalg.io

@ Nostalg.io Ucapan yang bagus, terima kasih! Saya mengedit jawabannya.
philippe_b

5

Versi bash ...

#!/bin/bash

set -ex

svg=$1

size=(16 32 24 48 72 96 144 152 192 196)

echo Making bitmaps from your svg...

for i in ${size[@]}; do
  inkscape $svg --export-png="favicon-$i.png" -w$i -h$i --without-gui
done

echo Compressing...

## Replace with your favorite (e.g. pngquant)
# optipng -o7 favicon-*.png
pngquant -f --ext .png favicon-*.png --posterize 4 --speed 1

echo Converting to favicon.ico...

convert $(ls -v favicon-*.png) favicon.ico

## Clean-up maybe?
# rm favicon-*.png

echo Done

Pemakaian: ./favicon.sh your-square-svg-file.svg

Membutuhkan: inkscape imagemagick optipng (opsional) dari manajer paket Anda.

Saya merasa lebih mudah untuk membuat kembali ini untuk bash shell karena Win10 dan Inkscape tidak rukun. Ini diuji dalam Subsistem Windows untuk Linux tetapi ini juga harus bekerja pada Mac.

Menggunakan referensi ini untuk memilih ukuran yang saya pedulikan: https://github.com/audreyr/favicon-cheat-sheet . Sesuaikan sizearray dengan kebutuhan spesifik Anda.


4

Saya akan menyarankan pendekatan ini:

1) buat skrip untuk mengekspor SVG ke ukuran apa pun yang diperlukan. Saya telah memberi kode pada skrip .bat ini untuk membantu saya membuat ikon Android

@echo off
set file="%~f1"
set path=%~dp1
set inkscape="C:\Program Files\Inkscape\inkscape.exe"

echo Le icone saranno salvate in %path%
echo Produzione icone applicative

echo %file% --export-png="%path%/ic32.png" -w32 -h32 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic48.png" -w48 -h48 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic72.png" -w72 -h72 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic96.png" -w96 -h96 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic144.png" -w144 -h144 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic192.png" -w192 -h192 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic512.png" -w512 -h512 > %~dp1/commands.txt
%inkscape% --shell < %~dp1/commands.txt
erase "%~dp1/commands.txt"

echo Procedura terminata

CATATAN :

  • % inkscape% yang ditentukan var harus memadai untuk jalan Anda Inkscape install
  • skrip menggaungkan semua perintah ekspor ke file temp ke manajemen proses inkscape yang lebih baik. Cli param "shell" menerima lebih banyak perintah menggunakan instance tunggal alih-alih menelurkan instance per perintah.

Dengan parameter ini, Inkscape akan memasuki mode shell baris perintah interaktif. Dalam mode ini, Anda mengetik perintah pada prompt dan Inkscape mengeksekusinya, tanpa Anda harus menjalankan salinan Inkscape baru untuk setiap perintah. Fitur ini sebagian besar berguna untuk skrip dan penggunaan server: ia tidak menambahkan kemampuan baru tetapi memungkinkan Anda untuk meningkatkan kecepatan dan persyaratan memori dari skrip apa pun yang berulang kali memanggil Inkscape untuk melakukan tugas-tugas baris perintah (seperti ekspor atau konversi). Setiap perintah dalam mode shell harus merupakan baris perintah Inkscape lengkap yang valid tetapi tanpa nama program Inkscape, misalnya "file.svg --export-pdf = file.pdf". ( lihat manual inkscape )

2) Tambahkan ke skrip di atas sintaks konversi yang dinyatakan dalam jawaban philippe-b yang menggabungkan semua PNG yang dihasilkan ke file ICO tunggal

3) Secara opsional, hapus semua PNG yang diekspor karena tidak diperlukan lagi


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.