Як я можу вставити кілька розмірів у файл .ico?


17

Я бачив іконки .ico, які мають різні зображення для різних розмірів, наприклад. 16х16, 32х32, 48х48, 128х128, 256х256. Як я можу створити файл значків, який підтримує декілька розмірів у Windows, якщо у мене є існуючі файли .ico для кожного розміру? Зверніть увагу, що я сподіваюся зробити це для більш ніж 200 файлів, тому робити це з cmd було б ідеально.

Відповіді:


28

ImageMagick (Windows / Mac / Linux) містить інструмент командного рядка, який називається, convertякий можна використовувати для багатьох речей, включаючи упаковку декількох зображень в одну піктограму:

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

Попередня команда приймає 5 зображень PNG і об'єднує їх в єдиний .ico файл.

На відміну від інших відповідей, цей спосіб легко використовувати в пакетних скриптах для автоматичного генерування декількох файлів значків. В одному з моїх проектів у мене є одне векторне зображення (SVG), і я використовую Inkscape для створення PNG різного розміру, а потім convertдля створення контейнера значків. Це скорочений приклад (у баш-скрипті):

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

1
Людина, я відчуваю, що я вивчаю новий спосіб використовувати ImageMagick convertкожного разу, коли я заглядаю. Дякую за відповідь!
Сухіпі

Як ви робите навпаки? Перетворити .icoв декілька PNG, виходячи з розмірів, які він містить?
Flimm

2
@Flimm convert favicon.ico favicon.pngгенерує favicon-0.pngі favicon-1.pngт.д. для кожного значка у кадрі. Якщо ви хочете знати розміри зображення, скористайтеся identifyкомандою на файлі png.
Роб Ш

Ви можете використовувати власні imagemagicks convert <icon.png> -resize 64x64замість inkscape
кумархарш

Я додав -dither Noneдо команди convert, оскільки перетворення за замовчуванням на 256 кольорів додало шуму моїй іконі
Джеймс Рот

7

Краща команда для ImageMagick:

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

1
Насправді це чудова відповідь. Використовуйте цю команду, щоб перевірити, чи файл фактично перетворився:identify out.ico
kumarharsh

5

Ви можете зробити це безкоштовно в GIMP . Є короткі інструкції щодо виконання цього тут .

Цитувати:

  1. Відкрийте своє зображення в Gimp
  2. Зробіть своє полотно квадратним
  3. Змініть розмір шару до зображення
  4. Масштабуйте шар до найбільшого розміру у вашому файлі .ico, наприклад 64 пікселів
  5. Дублювати шар
  6. Масштабуйте повторюваний шар до наступного розміру
  7. Продовжуйте дублювати / масштабувати всі потрібні розміри у вашому файлі .ico
  8. Збережіть як .ico

У вашому випадку ви можете або почати з найбільшого зображення та масштабування вниз для кожного дублюється зображення, або ви можете просто додати нові шари та імпортувати конкретні зображення значків, які ви хотіли, у цей шар.


Як ви підтримуєте кілька глибин кольору цим методом?
Випадково832

Не можу сказати, що мені довелося це робити особисто, але ця публікація говорить про те, що GIMP повинен зберігати діалогове вікно налаштувань кольору для кожного шару після збереження.
techturtle

Ви повинні експортувати в Gimp 2.8.16, але через роки я можу конфігурувати, що під час експорту ico є діалогове вікно налаштувань кольорів.
Broots Waymb

1

Ось Прийнятий відповідь на Rob W , з тривіальної адаптацією , щоб уникнути необхідності набирати розміри (16, 32 і т.д.) більше , ніж один раз:

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

Тут logo.svgпредставляє вхід (джерело) зображення, з якого ми створюємо файли меншого розміру бажаних розмірів ( 16.png, 32.pngі т.д.) , які потім об'єднуються в файл значок вихід (результат) favicon.ico. Ви можете змінити список розмірів у рядку 3, наприклад, на "16 24 32 48 64 72 128", і convertкоманда автоматично адаптується відповідно, тому що цей сценарій використовує техніку, описану G-Man у своїй відповіді тут, щоб створити масив імен файлів. І нарешті ми від’єднуємо (видаляємо) файли PNG, створені у рядку 4, використовуючи знову масив назви файлів.


Я помітив, що команда:

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

(еквівалентно представленому у відповіді user400747 ) насправді масштабоване зображення растрового зображення (втрачена якість), а шари фону втрачають прозорість.


1
(1) Ви фактично скопіювали чужу відповідь. Якщо ви це зробили і більше нічого (так, люди іноді так роблять), я б позначив вашу відповідь на видалення. Я цього не роблю, бо ти зробив крихітне покращення. Але кожного разу, коли ви копіюєте чужі твори, ви повинні визнати оригінального автора на ім'я та посилання на інформацію, яку ви цитуєте. (2) Будь ласка, не кажіть речі типу "це гнучкіше", не пояснюючи, що ви маєте на увазі. … (Продовження)
Скотт

(Протяг)… (3) Ви завжди повинні цитувати змінні оболонки, якщо у вас немає вагомих причин цього не робити, і ви впевнені, що знаєте, що робите. Насправді, з усіх прикладів сценаріїв, які використовують змінні оболонки, не цитуючи їх, ваші (тобто, Rob W's ) можуть бути серед найменш поганих. Але все ж, краще процитувати змінні. (4) Чому ви використовуєте unlinkзамість більш поширеного rm?
Скотт

1

Пакетний файл Windows, який створює декілька розмірів .PNG і об'єднує їх в один .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%" 
)

Якщо файли .PNG вам не потрібні, ви можете їх видалити (або видалити), del FILEабо зберегти всі PNG-файли всередині каталогу, який ви можете видалити (після %imageMagick% %exportFileNames%"%~dp0%fileName%.ico").

Сподіваюся, це комусь допоможе. :)


0

На мою думку, Axialis IconMaker - найкраще рішення проблем із іконами. Існує 30-денне випробування, яке, ймовірно, вирішить проблему для вас.

Я використовував Axialis стільки років і на стільки проектах, я можу засвідчити, що це дійсно вартий продукт. Вам не знадобиться 30 днів! Га!


0

Потрібно використовувати сторонню програму редагування іконок, оскільки MSPaint підтримує лише одну піктограму на файл. Є кілька з потоків тут з рекомендаціями для значків редакторів, деякі безкоштовно, деякі комерційні.

Після того, як ви розміститеся в редакторі значків, спосіб додавання форматів значків буде відрізнятися, але, як правило, буде подібним (натискаєте кнопку або вибираєте пункт меню, щоб додати новий формат). Більшість програм дозволить вам імпортувати файл значків при додаванні формату / розміру значків, але більшість також дозволить вам створити новий формат / розмір із існуючого шляхом його повторного розміру.

Якщо ви вирішите використовувати параметр " створити з існуючого " при додаванні нового формату / розміру, переконайтеся, що створити їх із найбільшого формату значків, який у вас уже є, оскільки він буде мати найбільше даних для алгоритму повторного розміру для роботи . Також не забудьте використовувати версію з прозорістю під час створення значка XP / Vista, оскільки більшість програм не чудово створюють альфа-канал з нуля.


Мені потрібно це зробити для понад 200 ікон. Чи може хтось із цих редакторів значків керувати продуктами в пакетному режимі?
Suchipi

1
Я не пригадую, щоб коли-небудь бачив редактор іконок у пакетному режимі. Ви можете спробувати використовувати редактор зображень у пакетному режимі, але я не впевнений, чи є які-небудь редактори зображень, які підтримують піктограму багатоформатного піктограми (принаймні, не з командного рядка / пакетного режиму). Якщо це зробити, це буде ImageMagick. Також слід додати вимогу щодо обсягу та пакетного режиму.
Synetech

0

Ви можете спробувати png2ico Маттіаса Бенкмана . Це безкоштовно і може упакувати png з декількома розмірами в один ico-файл.


Однак є деякі цікаві обмеження:Width must be multiple of 8 and <256. Height must be <256.
Франсуа Бота,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.