首页 > 解决方案 > 在 Python 中反转 .ico 文件

问题描述

我正在尝试根据 windows 主题反转 .ico 文件的图标。根据 Windows 的不同,我将尝试反转托盘图标。我还没有找到任何方法来实现这一点。

如何使用 python 2.7 反转图标?

def get_hicon(self, icon):
        hicon = None
        hinst = win32gui.GetModuleHandle(None)
        if icon and os.path.isfile(icon):
            icon_flags = win32con.LR_LOADFROMFILE | win32con.LR_DEFAULTSIZE
            ico_x = win32api.GetSystemMetrics(win32con.SM_CXSMICON)
            ico_y = win32api.GetSystemMetrics(win32con.SM_CYSMICON)
            hicon = win32gui.LoadImage(hinst,
                                        icon,
                                        win32con.IMAGE_ICON,
                                        ico_x,
                                        ico_y,
                                        icon_flags)
  return hicon

我使用此代码获取图标

标签: pythonimagenegation

解决方案


您可以使用 Pillow,反转图像并将其保存到临时文件中,该文件将在上下文管理器(带块)退出后自动删除

# pip install pillow
from PIL import Image, ImageOps
from tempfile import NamedTemporaryFile

with NamedTemporaryFile() as file, Image.open("image.ico") as img:
    old_mode = img.mode  # loaded as RGBA!

    rgb = img.convert("RGB")
    inverted = ImageOps.invert(rgb)
    inverted = inverted.convert(old_mode)

    inverted.save(file, format="ICO", quality=100)
    file.seek(0)  # rewind so it can be read again
    print(file.name)
    # /tmp/tmpjo7pa_r6
    # load/read icon here, probably self.get_hicon(file.name)
# file is automatically deleted here

推荐阅读