2009-02-08 7 views
17

Я пытался внедрить значок (.ico) в свой «compyled» .exe с py2exe.Значок внедрения .exe с py2exe, видимый в Vista?

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

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

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

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

Мне очень нравится делать это с помощью внешней утилиты, а не py2exe. Я попытался использовать this command-line utility, но он портит мой exe и по какой-то причине обрезает его размер.

ответ

20

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

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

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

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

+1

Значок, созданный png2ico, действительно работает, но png2ico отказывается использовать 256x256 PNG версию моего значка, он принимает только меньшие размеры. (Он говорит: «Ширина должна быть кратной 8 и <256. Высота должна быть <256.»). Есть ли способ обойти это ограничение? –

+0

Возможно, ваше максимальное разрешение 255x255? Я думаю, что это не будет выглядеть по-другому. –

+1

Я создал действительный значок с png2ico (с максимальным размером 248) и правильно указал его в файле py2exe setup.py, но он все равно не будет отображаться как сгенерированный значок exe в проводнике. Resource Hacker показывает, что значок встроен в exe, но Explorer этого не делает. Это странно. – James

4

Похоже, что размер иконок - это ключ, как сказал Хельмут. Чтобы инвертировать страницы (более крупные), решает проблему в Windows 7 для «include_resources» (используя Py2exe 0.6.9).

3

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

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

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

+0

Просто хотел сказать, что IcoFX отлично работал и поддерживал альфа-канал нашего логотипа. Png2ico работал, но наш значок выглядел неровным и недостаточно хорош для профессионального приложения. Тем не менее, Png2ico является бесплатным, а IcoFX - нет (существует бесплатная пробная версия, и вы можете экспортировать ее). Чтобы сделать правильный значок в IcoFX, это было очень просто: я просто перетащил его прямо из формата 256x256 .PNG, нажал кнопку «Сохранить» и сделал значок Windows со всеми форматами, которые работали с Py2exe. (Включая форматы более низкого разрешения для более старых ОС.) – SilentSteel

4

У меня возникли проблемы с вложением ресурса значков с 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.

+0

У меня была такая же проблема. Как только я завернул несколько изображений в файл значка, он, наконец, сработал. –

+0

У меня была эта проблема, но 'myicon248x248.png' все равно попадет на ресурс 0. см. Https://stackoverflow.com/a/36116599/57461 – Pod