Kare SVG'yi her boyuttaki ICO'ya nasıl dönüştürebilirim?


24

InkScape'de bir simge çizdim ve tüm makul çözünürlüklerde (16x16, 32x32, ... 256x256 vb.) Sprite içeren bir ICO dosyasına vermek istiyorum. Bu nasıl yapılabilir (Photoshop, CorelDraw vb. Büyük ve pahalı yazılımlar kullanmadan)?


2
Hızlı bir arama, tek bir ICO'yu InkScape'den bile dışa aktarmanın bir yolu olmadığını söylüyor; ancak GIMP gibi ek özgür yazılımlarla bunun nasıl yapılacağı konusunda pek çok öneri var. Bu seçenekleri kontrol ettin mi? Onlar senin için işe yaramadıysa, neden olmadığını söyler misin?
usr2564301 11:16

@RadLexus çalıştığım şey, birkaç çevrimiçi araç ve hepsi anlayabildiğim kadarıyla tek boyutlu ICOns oluşturmak anlamına geliyor.
Ivan

5
Yani, çok boyutlu ICO'ların nasıl oluşturulacağını bilmek ister misiniz? Bu Yığın Taşması cevabındaki seçenekleri deneyin: stackoverflow.com/questions/4354617/… (yine, basit bir Google sorgusu tarafından bulundu ...).
usr2564301

1
İco dosyası olarak dışa aktarılan bir Inkscape uzantısı var , ancak çalışıp çalışmadığını denemek için şu anda zamanım yok.
Paolo Gibellini

Sorunuzu yanıtlamak için aşağıdakilerden birini bulursanız, lütfen kabul edilen cevap olarak işaretleyin.
DᴀʀᴛʜVᴀᴅᴇʀ

Yanıtlar:


24

ImageMagick'i hemen kullanabilirsiniz :

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

3
Neden bu yoğunluk?
naught101

1
Bilmiyorum, bunu başka bir yerden kopyaladım.
heltonbiker

@ naught101 burada yoğunluk bayrağının dokümantasyonu - her ne kadar resim boyutları, dpi'ler ve bunların ara görüntü rasterleştirmesi ile çok özel bir şey yapmıyorsanız, bu oldukça gereksiz bir adım gibi gözükse de. imagemagick.org/script/command-line-options.php#density
CreationTribe

7
convert -background none icon.svg -define icon:auto-resize icon.icoSaydam arka plan tutmak için kullanın .
Robert Hume,

2
magick convert -background none icon.svg -define icon:auto-resize icon.icobenim için çalıştı.
intotecho

15

Bir komut satırı çözümü:

1) SVG'nizi InkScape ile PNG'ye aktarın

2) Bu PNG görüntüsünü, ImageMagick ile istediğiniz boyutlarda yeniden boyutlandırın:

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) PNG görüntülerini ICO'ya dönüştürün:

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

4) ICO'nuzun her şeyi içerdiğinden emin olun:

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

Çalışmayı kolaylaştırmak için basit bir toplu iş veya kabuk dosyası da kullanabilirsiniz.
Paolo Gibellini

3
Zaten rasterleştirilmiş PNG'leri yeniden boyutlandırmak yerine birçok png boyutunu doğrudan SVG'den dışa aktarmak daha iyi olmaz mıydı (biraz daha karmaşık olsa bile)?
heltonbiker

1
Başka birinin merak etmesi durumunda, "..." gerçek değil. Favicon.ico dosyasına sıkıştırmak için diğer png dosya boyutlarını gösterir.
Nostalg.io

@ Nostalg.io İyi bir not, teşekkürler! Cevabı değiştirdim.
philippe_b

5

Bash sürümü ...

#!/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

Kullanımı: ./favicon.sh your-square-svg-file.svg

Gerektirir: inkscape imagemagick optipng (isteğe bağlı) paket yöneticinizden.

Win10 ve Inkscape'in üstesinden gelemediği için bunu bash kabuğu için yeniden yaratmayı daha kolay buldum. Bu Linux için Windows Subsystem içinde test edildi ancak Mac üzerinde de çalışması gerekiyor.

İlgilendiğim boyutları seçmek için bu referansı kullandım: https://github.com/audreyr/favicon-cheat-sheet . sizeDiziyi özel ihtiyaçlarınıza göre ayarlayın .


4

Bu yaklaşımı öneriyorum:

1) SVG'yi istenen boyutta dışa aktarmak için bir komut dosyası oluşturun. Android simgesi oluşturmama yardımcı olmak için bu .bat komut dosyasını kodladım

@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

NOT :

  • tanımlı % inkscape% var, Inkscape yükleme yolunuz için yeterli olmalıdır
  • komut dosyası, tüm ihracat komutlarını, daha iyi bir inkscape işlem yönetimi için geçici bir dosyaya ekolar. "Kabuk" cli param, komut başına bir örnek oluşturmak yerine tek bir örnek kullanarak daha fazla komut kabul eder.

Bu parametre ile Inkscape etkileşimli bir komut satırı kabuğu moduna girecektir. Bu modda, komut istemine komut yazarsınız ve Inkscape her komut için yeni bir Inkscape kopyası çalıştırmak zorunda kalmadan bunları çalıştırır. Bu özellik çoğunlukla komut dosyası ve sunucu kullanımları için kullanışlıdır: yeni bir özellik eklemez, ancak art arda komut satırı görevlerini (dışa aktarma veya dönüşüm gibi) gerçekleştirmek için Inkscape'i çağıran herhangi bir komut dosyasının hızını ve bellek gereksinimlerini artırmanıza olanak tanır. Kabuk modundaki her komut tam bir geçerli Inkscape komut satırı olmalıdır, ancak Inkscape program adı olmadan, örneğin "file.svg --export-pdf = file.pdf". ( inkscape kılavuzuna bakınız )

2) Yukarıdaki betiğe , oluşturulan tüm PNG'leri tek bir ICO dosyasına birleştiren philippe-b yanıtında belirtilen dönüştürme sözdizimini ekleyin.

3) İsteğe bağlı olarak, dışa aktarılan tüm PNG'leri kaldırın, çünkü artık gerek kalmaz


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.