Как вставить несколько размеров в файл .ico?


17

Я видел иконки .ico, которые имеют разные изображения для разных размеров, например. 16x16, 32x32, 48x48, 128x128, 256x256. В 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для создания контейнера значков. Это сокращенный пример (в скрипте 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

1
Чувак, я чувствую, что я изучаю новый способ использования ImageMagick convertкаждый раз, когда смотрю на это. Спасибо за ответ!
Сучипи

Как ты делаешь обратное? Преобразовать .icoв несколько PNG, в зависимости от размеров он содержит?
Flimm

2
@Flimm convert favicon.ico favicon.pngгенерирует favicon-0.png, favicon-1.pngи т.д. для каждого значка в кадре. Если вы хотите узнать размеры изображения, используйте identifyкоманду в файле png.
Роб W

Вы можете использовать собственный convert <icon.png> -resize 64x64
imagemagicks

Я добавил -dither Noneв команду конвертации, потому что преобразование по умолчанию в 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

В вашем случае вы можете либо начать с самого большого изображения и уменьшать его для каждого дублированного изображения, либо просто добавить новые слои и импортировать нужные изображения значков в этот слой.


Как вы поддерживаете несколько глубин цвета этим методом?
Random832 22.10.12

Не могу сказать, что мне приходилось делать это лично, но в этом посте говорится, что GIMP должен вывести диалоговое окно настроек цвета для каждого слоя после сохранения.
Techturtle

Вы должны выбрать экспорт в Gimp 2.8.16, но спустя годы я могу утверждать, что при экспорте ico появляется диалоговое окно для настройки цвета.
Брутс Уэймб

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

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


1
(1) Вы по сути скопировали чужой ответ. Если бы вы сделали это и ничего более (да, люди иногда так делают), я бы пометил ваш ответ для удаления. Я этого не делаю, потому что вы сделали небольшое улучшение. Но всякий раз, когда вы копируете чужую работу, вы должны признать оригинального автора по имени и со ссылкой на информацию, которую вы цитируете. (2) Пожалуйста, не говорите что-то вроде «это более гибко», не объясняя, что вы имеете в виду. … (Продолжение)
Скотт

(Продолжение)… (3) Вы должны всегда заключать в кавычки переменные оболочки, если у вас нет веских причин не делать этого, и вы уверены, что знаете, что делаете. На самом деле, из всех примеров, которые я видел для сценариев, которые используют переменные оболочки без кавычек, ваш (т. Е. Роб У ) может быть среди наименее плохих. Но все же лучше процитировать переменные. (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 иконок. Может ли какой-либо из этих редакторов пиктограмм запускать вещи в пакетном режиме?
Сучипи

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.