Встраивание значка в .exe с py2exe, видимый в Vista? - PullRequest
17 голосов
/ 08 февраля 2009

Я пытался встроить иконку (.ico) в мой «скомпилированный» .exe с py2exe.

Py2Exe имеет возможность встроить иконку:

windows=[{
    'script':'MyScript.py',
    'icon_resources':[(1,'MyIcon.ico')]
}]

И это то, что я использую. Значок отлично отображается в Windows XP или ниже, но не отображается в Vista. Я полагаю, это из-за нового формата иконок Vista, который может быть в формате PNG, до 256x256 пикселей.

Итак, как я могу заставить py2exe встраивать их в мой исполняемый файл, не нарушая значки в Windows XP?

Я отлично справляюсь с внешней утилитой, а не с py2exe - я пытался эта утилита командной строки встроить ее, но она всегда повреждает мой exe и по какой-то причине усекает его размер .

Ответы [ 4 ]

20 голосов
/ 08 февраля 2009

Vista использует иконки с высоким разрешением 256x256 пикселей изображения, они хранятся с использованием PNG-на основе сжатия. Проблема в том, что если вы просто сделаете иконку и сохраните ее в стандартном формате XP ICO, результирующий файл будет 400Kb на диске. Решение состоит в том, чтобы сжать изображения. Используется схема сжатия PNG (Portable Network Graphic), потому что она имеет хороший коэффициент без потерь и поддерживает альфа-канал.

И использовать

png2ico myicon.ico logo16x16.png logo32x32.png logo255x255.png

Создает ICO файл из 1 или более PNG и обрабатывает несколько размеров и т. Д. И я думаю, XP не будет иметь проблем с этим.

4 голосов
/ 02 мая 2012

У меня были проблемы с внедрением ресурса значков py2exe в Windows7 с использованием файла .ico, содержащего изображение размером 32x32 пикселя. Я использовал тот же метод, что и оригинальный вопрос.

После компиляции значок на exe исчезает. При расследовании значок добавляется с индексом 0 в соответствии с инструментом Resource Hacker , но если я использую тот же инструмент для замены значка, он добавляется с индексом 1. Однажды в индексе 1 значок волшебным образом появляется в Исследователь против exe снова.

Если вы в отчаянии, вы можете использовать Resource Hacker, чтобы изменить exe post-build, и он может быть записан через сценарий через интерфейс командной строки, но я попробовал метод, описанный выше, и сумел заставить его работать после обращения png-файлов, например, так.

png2ico.exe myico.ico myico248x248.png myico48x48.png myico32x32.png myico16x16.png

Кстати, добавив несколько значков в файл ico, вы все равно заполняете ресурс индексом значков 1, в данном случае myico248x248.png.

4 голосов
/ 01 июня 2011

Кажется, что порядок размеров значков является ключевым, как сказал Хельмут. Инвертировать страницы (сначала большие) решает проблему с Windows 7 для include_resources (с использованием Py2exe 0.6.9).

3 голосов
/ 31 января 2012

Ссылка на Greenfish Iceon Editor Pro не работает. Я отсканировал сеть и нашел Скачать IcoFX Использовал программу IcoFX для моего файла .exe и увидел, что на самом деле он содержит мою иконку.

Используя меню Image-> Create Windows Icons from Image, а затем принимая выбор, я получил новый файл .ico, который работал как на win7, так и на win xp

До этого мой единственный файл 48x48.ico просто не отображался в качестве иконки для программы.

...