Рецепт для создания файлов Windows ICO с ImageMagick?

Я хотел бы создать.ico значок для моего приложения Windows динамически (из файла SVG) с помощью ImageMagick. Как я могу это сделать?

Microsoftперечисляет различные требования к глубине и размеру цвета для иконы. ImageMagick имеет-depth а также-colors варианты, но я не уверен, как правильно их использовать в этом случае.

Кроме того, это выглядит какVista + поддерживает значок высокого разрешения 256x256 встроен в то же самое.ico который может (должен? должен?) быть сжатым PNG. Как мне & quot; присоединиться & quot; значки Windows XP и этот новый значок Vista в одном.ico файл?

 Linas11 июл. 2012 г., 02:02
Если вам интересно, этоapplication значок (тот, который наклеен на сам .exe).

Ответы на вопрос(8)

logo.svg вlogo.ico, используя Inkscape для экспорта изображений PNG разных размеров:

eval convert \
  '<(inkscape -e /dev/stderr logo.svg -w '{16,24,32,48,64,128,256}' 2>&1 > /dev/null)' \
  logo.ico

ВдохновленныйОтвет Малкольма МакЛауда, но избегая явного цикла и временных файлов.

stderr и перенаправление, чтобы избежать сообщения об успехе Inkscape наstdout (& # x201C; Растровое изображение сохранено как: / dev / stdout & # x201D;), попадающее в данные изображения.

 04 окт. 2018 г., 00:34
Идеальное решение немного сложнее, поскольку необходимо предоставить размеры 16, 24, 32, 48 в виде 4-битных, 8-битных и 32-битных изображений.
Решение Вопроса

Миниатюра ссылки на веб-страницу FavIcon

По сути вы запускаете следующее:

convert image.png  -bordercolor white -border 0 \
          \( -clone 0 -resize 16x16 \) \
          \( -clone 0 -resize 32x32 \) \
          \( -clone 0 -resize 48x48 \) \
          \( -clone 0 -resize 64x64 \) \
          -delete 0 -alpha off -colors 256 favicon.ico

Вы можете изменить это, чтобы включить большее разрешение по мере необходимости и изменить такие вещи, как границы, настройки прозрачности и т. Д.

 02 апр. 2013 г., 20:57
@MalcolmMacLeod Да, вы совершенно правы, конвертация напрямую из SVG с использованием этого метода дает ужасные результаты
 02 апр. 2013 г., 07:58
За исключением того, что автор хочет сделать это с SVG. Как указано в моем ответе, использование этой команды в SVG полностью разрушит качество получаемого значка, поскольку imagemagick изменяет размер SVG только после растеризации.
 20 июн. 2013 г., 22:04
конвертировать из SVG Интересно, можно ли "конвертировать в большое изображение"? во-первых (например, png), или, возможно, используйте трюк плотности и изменения размера:imagemagick.org/discourse-server/viewtopic.php?f=1&t=13585
 26 мар. 2013 г., 13:47
На самом деле вы должны быть в состоянии опустить-bordercolor white -border 0 если вы используете-alpha remove вместо-alpha off.
magick convert in.jpg -define icon:auto-resize=16,48,256 -compress zip out.ico

http://imagemagick.org/script/command-line-options.php#define

 06 апр. 2016 г., 12:15
Я бы добавил 32 и 64 к размеру, а также к списку - тогда я думаю, что это идеально подходит для всех ОС Windows: s
 09 дек. 2018 г., 16:33
С IM 7 вы положилиmagick на передней панели для CLI
 06 апр. 2016 г., 12:18
Я не заметил какой-либо разницы с или без «-compress zip», хотя
 31 мар. 2017 г., 16:25
& # x201C; convert.im6: ширина или высота превышает предел & # x201D; & # X2014; исправлено путем изменения размера входного изображения до 256 & # xD7; 256 пикселей. Но прозрачные части в оригинальных pngs стали белыми.

Часто задаваемые вопросыизменен, чтобы все резолюции, упомянутые вMSDN ссылка (кроме тех, которые указаны в разделе "Дополнительные размеры ...") (в другом ответе не было всех желаемых разрешений)

 convert input.png -bordercolor white -border 0 ( -clone 0 -resize 16x16 ) ( -clone 0 -resize 24x24 ) ( -clone 0 -resize 32x32 ) ( -clone 0 -resize 40x40 ) ( -clone 0 -resize 48x48 ) ( -clone 0 -resize 64x64 ) ( -clone 0 -resize 256x256 ) -delete 0 -alpha off -colors 256 output.ico

соб - это установить InkScape и ImageMagick, используяшоколадным и затем выполните следующее в командном файле. (Это не так гибко, как другие ответы, которые вы просто передаете в одном SVG, но он выкачивает все значки, рекомендованные вШпаргалка Фавикон.

@ECHO off

IF "%1"=="" (
    ECHO You must provide an svg file
    EXIT /b
) 

IF NOT EXIST favicons MD favicons

SET "sizes=16 24 32 48 57 64 72 96 120 128 144 152 195 228 256 512"

FOR %%s IN (%sizes%) DO (
    inkscape -z -e favicons/favicon-%%s.png -w %%s -h %%s %1
)

convert favicons/favicon-16.png favicons/favicon-24.png favicons/favicon-32.png favicons/favicon-48.png favicons/favicon-64.png favicons/favicon.ico
 05 сент. 2018 г., 22:47
Привет, в соответствии с тем, что я прочитал, Imagick не может произвести 512 значков, верно?

Don't use -color=256, as you need 32-bit color versions for all sizes with modern Windows versions (Vista+) Necessary sizes in Windows are 16, 24, 32, 48, 64, 128, 256. Most scripts forgot those. I am unsure if 96 is really needed, but it doesn't hurt. You need to include 4-bit and 8-bit palette versions for the sizes 16, 24, 32 and 48 (apparently to support Remote Desktop applications in particular)

Все в одном скрипте bash (начиная сlogo.svg и производствоlogo.ico):

#!/bin/bash

for size in 16 24 32 48 64 96 128 256; do
    inkscape -z -e $size.png -w $size -h $size logo.svg >/dev/null 2>/dev/null
done

for size in 16 24 32 48; do

  convert -colors 256 +dither $size.png png8:$size-8.png
  convert -colors 16  +dither $size-8.png $size-4.png

done

convert 16.png 24.png 32.png 48.png 16-8.png 24-8.png 32-8.png 48-8.png 16-4.png 24-4.png 32-4.png 48-4.png 64.png 96.png 128.png 256.png logo.ico

rm 16.png 24.png 32.png 48.png 16-8.png 24-8.png 32-8.png 48-8.png 16-4.png 24-4.png 32-4.png 48-4.png 64.png 96.png 128.png 256.png 

что только ImageMagick может это сделать, так как он не обрабатывает SVG-изменение в разумных пределах (но вместо этого изменяет размер SVG только после растеризации, что приводит к ужасному результату)

С помощью inkscape для преобразования это представляется возможным, например, например. Следующий вкладыш должен дать вам иконку со всеми размерами:

mkdir temp; declare -a res=(16 24 32 48 64 128 256); for f in *.svg; do for r in "${res[@]}"; do inkscape -z -e temp/${f}${r}.png -w $r -h $r $f; done; resm=( "${res[@]/#/temp/$f}" ); resm=( "${resm[@]/%/.png}" ); convert "${resm[@]}" ${f%%.*}.ico; done; rm -rf temp;

Однако приведенное выше не даст вам 8- и 4-битных значков в файле (я думаю, что они нужны только для более старых версий Windows, которые больше не поддерживаются) Должно быть возможно с немного большим количеством работы сделать это, если они вам нужны.

 05 сент. 2018 г., 22:48
Похоже, что решение для Mac использует tiff2ico, а Windows, в то время как установка размера 512, на самом деле не производит значок 512. В любом случае спасибо за помощь!
 21 авг. 2018 г., 00:27
Может ли это работать с разрешением 512 пикселей? В другом месте я видел, что ImageMagick не допускает размеры 512 ico. Я делаю иконки, которые будут отображаться на большом экране 4k, так что я считаю разумным иметь разрешение 512 на всякий случай.
 14 нояб. 2016 г., 17:19
 04 сент. 2018 г., 10:39
@ DavidA.French Насколько я знаю, да (некоторые из измененных ответов, основанных на моем выше, также содержат 512 пикселей в секунду); Однако, вероятно, лучше всего попробовать и посмотреть?

исправил ошибку, а также сделал вывод tiffs скрипта, чтобы вы могли запускать tiff2icns в osx.

#! /bin/bash
# converts the passed-in svgs to tiff and ico

if [[ $# -eq 0 ]]; then
    echo "Usage: $0 svg1 [svg2 [...]]"
    exit 0
fi

temp=$(mktemp -d)
declare -a res=(16 24 32 48 64 128 256 512)
for f in $*; do
    mkdir -p $temp/$(dirname $f)
    for r in "${res[@]}"; do
        inkscape -z -e $temp/${f}${r}.png -w $r -h $r $f
    done
    resm=( "${res[@]/#/$temp/$f}" )
    resm=( "${resm[@]/%/.png}" )
    for filetype in ico tiff; do
        convert "${resm[@]}" ${f%%.*}.$filetype
    done
done
rm -rf $temp

Ваш ответ на вопрос