Jak osadzić wiele rozmiarów w pliku .ico?

17

Widziałem ikony .ico, które mają różne obrazy dla wielu rozmiarów, np. 16x16, 32x32, 48x48, 128x128, 256x256. W systemie Windows, jak mogę utworzyć plik ikony obsługujący wiele rozmiarów w ten sposób, biorąc pod uwagę, że mam istniejące pliki .ico dla każdego rozmiaru? Pamiętaj, że mam nadzieję, że zrobię to z ponad 200 plikami, więc robienie tego z cmd byłoby idealne.

Suchipi
źródło

Odpowiedzi:

28

ImageMagick (Windows / Mac / Linux) zawiera narzędzie wiersza polecenia o nazwie, convertktórego można używać do wielu rzeczy, w tym do pakowania wielu obrazów w jedną ikonę:

convert 16.png 32.png 48.png 128.png 256.png -colors 256 icon.ico

Poprzednie polecenie pobiera 5 obrazów PNG i łączy je w jeden plik .ico.

W przeciwieństwie do innych odpowiedzi, tę metodę można łatwo zastosować w skryptach wsadowych do automatycznego generowania kilku plików ikon. W jednym z moich projektów mam pojedynczy obraz wektorowy (SVG) i używam Inkscape do generowania plików PNG o różnych rozmiarach, a następnie convertdo utworzenia kontenera ikon. To jest zredukowany przykład (w skrypcie bash):

#!/bin/bash
for size in 16 32 48 128 256; do
    inkscape -z -e $size.png -w $size -h $size icon.svg >/dev/null 2>/dev/null
done
convert 16.png 32.png 48.png 128.png 256.png -colors 256 icon.ico
Rob W.
źródło
1
Człowieku, mam wrażenie, że uczę się nowego sposobu korzystania z ImageMagick za convertkażdym razem, gdy go zaglądam . Dziękuję za odpowiedź!
Suchipi
Jak robisz coś przeciwnego? Konwertujesz .icona wiele plików PNG, na podstawie zawartych w nich rozmiarów?
Flimm
2
@Flimm convert favicon.ico favicon.pnggeneruje favicon-0.png, favicon-1.pngitd dla każdego ikonę w ramce. Jeśli chcesz poznać wymiary obrazu, użyj identifypolecenia w pliku png.
Rob W
convert <icon.png> -resize 64x64Zamiast inkscape możesz użyć własnego imagemagicks
kumarharsh
Dodałem -dither Nonedo polecenia konwersji, ponieważ domyślna konwersja do 256 kolorów dodała trochę szumu do mojej ikony
James Roth
7

Lepsze polecenie dla ImageMagick:

convert in.jpg -define icon:auto-resize=16,48,256 -compress zip out.ico

źródło
1
To naprawdę świetna odpowiedź. Użyj tego polecenia, aby sprawdzić, czy plik faktycznie został przekonwertowany:identify out.ico
kumarharsh
5

Możesz to zrobić za darmo w GIMP . Są krótkie instrukcje robi to tutaj .

Cytować:

  1. Otwórz swój obraz w Gimp
  2. Spraw, by twoje płótno było kwadratowe
  3. Zmień rozmiar warstwy na obrazie
  4. Skaluj warstwę do największego rozmiaru w pliku .ico, np. 64 pikseli
  5. Powiel warstwę
  6. Skaluj zduplikowaną warstwę do następnego rozmiaru
  7. Powtarzaj / skaluj dla wszystkich rozmiarów, które chcesz w pliku .ico
  8. Zapisz jako .ico

W twoim przypadku możesz albo zacząć od największego obrazu i pomniejszyć każdy zduplikowany obraz, albo możesz po prostu dodać nowe warstwy i zaimportować określone obrazy ikon do tej warstwy.

techturtle
źródło
W jaki sposób obsługuje się wiele głębi kolorów za pomocą tej metody?
Random832,
Nie mogę powiedzieć, że musiałem to zrobić osobiście, ale w tym poście GIMP powinien wyświetlić okno dialogowe ustawień kolorów dla każdej warstwy po zapisaniu.
techturtle
Musisz wybrać eksport w Gimp 2.8.16, ale lata później mogę stwierdzić, że jest okno dialogowe ustawień kolorów podczas eksportowania ico.
Broots Waymb,
1

Oto przyjętym odpowiedź przez Roba W , z błahego adaptacji, aby uniknąć konieczności wpisywania rozmiarów (16, 32, itd) więcej niż raz:

#!/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[@]}"

Tutaj logo.svgoznacza obrazu wejściowego (źródło), z którego możemy tworzyć mniejsze pliki o pożądanych rozmiarach ( 16.png, 32.pngetc.) które następnie łączą się w wyjście (wynik) pliku ikona favicon.ico. Możesz zmienić listę rozmiarów w wierszu 3, np. Na „16 24 32 48 64 72 128”, a convertpolecenie automatycznie dostosuje się odpowiednio, ponieważ ten skrypt używa techniki opisanej przez G-Mana w jego odpowiedzi tutaj, aby zbudować tablica nazw plików. I w końcu odłączamy (usuwamy) pliki PNG utworzone w linii 4, ponownie używając tablicy nazw plików.


Zauważyłem, że polecenie:

convert logo.svg -define icon:auto-resize=16,48,256 -compress zip favicon.ico

(odpowiednik tego przedstawionego w odpowiedzi użytkownika 400747 ) faktycznie przeskalowany obraz bitmapowy (utracona jakość) i przezroczystość tła warstwy.

Andris Petrams
źródło
1
(1) Zasadniczo skopiowałeś czyjąś odpowiedź. Jeśli to zrobiłeś i nic więcej (tak, ludzie czasami to robią), oznaczałbym twoją odpowiedź do usunięcia. Nie robię tego, ponieważ dokonałeś drobnej poprawy. Ale za każdym razem, gdy kopiujesz czyjąś pracę, powinieneś potwierdzić oryginalnego autora po nazwisku i łącząc się z cytowanymi informacjami. (2) Nie mów takich rzeczy jak „to jest bardziej elastyczne” bez wyjaśnienia, co masz na myśli. … (Ciąg dalszy)
Scott,
(Ciąg dalszy)… (3) Zawsze powinieneś cytować zmienne powłoki, chyba że masz dobry powód, aby tego nie robić i jesteś pewien, że wiesz, co robisz. Właściwie, spośród wszystkich przykładów skryptów, które używają zmiennych powłoki bez cytowania ich, twój (np. Rob W ) może być jednym z najgorszych. Ale nadal lepiej cytować zmienne. (4) Dlaczego używasz unlinkzamiast bardziej powszechnego rm?
Scott,
1

Plik wsadowy systemu Windows, który tworzy pliki .PNG o wielu rozmiarach i łączą je w jeden plik .ICO:

@echo off

set inkScape="C:\SOFTWARE\GRAPHIC\INKSCAPE\inkscape.exe"
set imageMagick="C:\SOFTWARE\DEVELOPER\IMAGEMAGICK\magick.exe"
set fileName=favicon
set importType=svg
set exportType=png
set exportDpi=300
set imageSizes=(16 24 32 48 57 60 64 70 72 76 96 114 120 128 144 150 152 180 192 196 256 300 320 400 450 460 480 512 600)

for %%s in %imageSizes% do (
 %inkScape% -z -f %~dp0%fileName%.%importType% -w %%s -h %%s -e %~dp0%fileName%-%%sx%%s.%exportType% -d %exportDpi%
 echo CREATED: %fileName%-%%sx%%s.%exportType%
 set e=%fileName%-%%sx%%s.%exportType%
 call :concat (e)
)

%imageMagick% %exportFileNames%"%~dp0%fileName%.ico"
echo MERGED IN: %fileName%.ico

pause goto :eof


:concat (e) (
 set exportFileNames=%exportFileNames%"%~dp0%e%" 
)

Jeśli nie potrzebujesz plików .PNG, możesz je usunąć (lub usunąć) del FILElub zapisać wszystkie pliki PNG w katalogu, który możesz usunąć (po %imageMagick% %exportFileNames%"%~dp0%fileName%.ico").

Mam nadzieję, że to komuś pomoże. :)

Froschkoenig84
źródło
0

Moim zdaniem Axialis IconMaker jest najlepszym rozwiązaniem problemów z ikonami. Jest 30-dniowa wersja próbna, która prawdopodobnie rozwiąże problem.

Używam Axialis od tylu lat i przy tak wielu projektach mogę potwierdzić, że jest to naprawdę wartościowy produkt. Nie potrzebujesz 30 dni! Ha!

Jerry Nixon
źródło
0

Musisz użyć programu do edycji ikon innej firmy , ponieważ MSPaint obsługuje tylko jedną ikonę na plik. Istnieje kilka z wątków tutaj z zaleceniami dla redaktorów ikona, niektóre darmowe, niektóre komercyjne.

Po ustawieniu edytora ikon metoda dodawania formatów ikon będzie się różnić, ale ogólnie będzie podobna (kliknij przycisk lub wybierz element menu, aby dodać nowy format). Większość programów pozwala importować plik ikony podczas dodawania formatu / rozmiaru ikony, ale większość pozwala także na utworzenie nowego formatu / rozmiaru z istniejącego poprzez zmianę jego rozmiaru.

Jeśli zdecydujesz się użyć opcji tworzenia z istniejącego podczas dodawania nowego formatu / rozmiaru, pamiętaj, aby utworzyć je z największego formatu ikon, który już masz, ponieważ będzie on zawierał najwięcej danych dla algorytmu zmiany rozmiaru do pracy z . Pamiętaj też, aby podczas tworzenia ikony XP / Vista używać wersji z przezroczystością, ponieważ większość programów nie jest świetna w tworzeniu kanału alfa od zera.

Synetech
źródło
Muszę to zrobić dla ponad 200 ikon. Czy którykolwiek z tych edytorów ikon może uruchamiać elementy wsadowo?
Suchipi
1
Nie pamiętam, żeby kiedykolwiek widziałem edytor ikon w trybie wsadowym. Możesz spróbować użyć edytora obrazów w trybie wsadowym, ale nie jestem pewien, czy którykolwiek edytor obrazu obsługuje wieloformatowe ikony (przynajmniej nie z wiersza poleceń / trybu wsadowego). Jeśli tak, to ImageMagick. Ponadto do pytania należy dodać wymaganie dotyczące objętości i trybu wsadowego.
Synetech
0

Możesz spróbować png2ico Matthiasa Benkmanna . Jest bezpłatny i może spakować pliki PNG o wielu rozmiarach do jednego pliku ico.

Dimitri C.
źródło
Ma jednak kilka interesujących ograniczeń:Width must be multiple of 8 and <256. Height must be <256.
Francois Botha