Преобразование изображений в значки приводит к ошибкам

#python-3.x #python-imaging-library

Вопрос:

Я конвертирую изображения в значки с помощью этого кода:

 import PIL.image

img = PIL.Image.open ("imagepath.png")
img.save ("iconpath.ico")
 

Это дает мне файл значков по желанию, но когда я пытаюсь открыть его, появляется ошибка:
Краски:
Ошибка окраски
Ошибка в фотографиях Microsoft: Ошибка в фотографиях Microsoft

Когда я пытаюсь открыть другие значки с помощью тех же программ, они отлично работают, но не с теми, которые я сделал. Кто — нибудь знает какой-нибудь другой способ или библиотеку для этого?

Ответ №1:

Попробуй это:

 img.save('iconpath.ico',format = 'ICO', sizes=[(32,32)])
 

Вы можете изменить размер на 16,16

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

Учебник

Все работало нормально.

Преобразуемое изображение должно иметь пропорцию 1:1, если нет, то при попытке открыть сгенерированный значок это приведет к ошибкам.

Комментарии:

1. Я думаю, что нашел ошибку. При попытке снова открыть значок результата с PIL.Image.open помощью , он показывает эту ошибку; C:UsersAdminAppDataLocalProgramsPythonPython38libsite-packagesPILIcoImagePlugin.py:306: UserWarning: Image was not the expected size warnings.warn("Image was not the expected size") <PIL.IcoImagePlugin.IcoImageFile image mode=RGB size=256x238 at 0x22275E2A400>

2. Я думаю, что перед преобразованием изображения необходимо изменить размер, но я не знаю, как это сделать, я подумал о добавлении прозрачных полосок по бокам изображения, чтобы соотношение было 1:1.

3. Вот почему вы это сделали sizes=[(32,32)] . Да, соотношение должно быть 1:1 для. максимальный размер ico-255×255. Измените одну строку своего кода на то, что я дал вам в ответе, и посмотрите, сработает ли это.

4. Я использовал точную строку, которую вы указали, и ошибка все та же.

5. Я только что сделал это с изображением в пропорциях 1:1 и хорошо работает с той же строкой, которую вы опубликовали.