gpt4 book ai didi

python - 如何从EXE中提取32x32图标位图数据并将其转换为PIL Image对象?

转载 作者:行者123 更新时间:2023-11-30 23:31:39 25 4
gpt4 key购买 nike

我正在尝试从 EXE 中提取 32x32 图标,并将位图数据转换为 PIL Image 对象。我的最终目标是将图标与另一个 32x32 PNG 进行比较,并通过 RMS 获得差异。

我尝试过执行 win32gui.ExtractIconEx() 然后执行 win32gui.GetIconInfo() 并尝试执行 Image.open() ,但显然 PIL 不接受 PyHANDLE 对象。我还尝试过直接使用 Image.open() 打开 exe,显然这是行不通的。

我现在很困惑,有没有什么办法可以在 Python 中实现这一点,或者我应该用不同的语言编写这部分代码?

最佳答案

来自邮件列表 here ,我找到了这个代码片段:

import win32ui
import win32gui
import win32con
import win32api

ico_x = win32api.GetSystemMetrics(win32con.SM_CXICON)
ico_y = win32api.GetSystemMetrics(win32con.SM_CYICON)

large, small = win32gui.ExtractIconEx("C:\Program Files (x86)\Malwarebytes' Anti-Malware\mbam.exe",0)
win32gui.DestroyIcon(small[0])

hdc = win32ui.CreateDCFromHandle( win32gui.GetDC(0) )
hbmp = win32ui.CreateBitmap()
hbmp.CreateCompatibleBitmap( hdc, ico_x, ico_x )
hdc = hdc.CreateCompatibleDC()

hdc.SelectObject( hbmp )
hdc.DrawIcon( (0,0), large[0] )

hbmp.SaveBitmapFile( hdc, 'icon.bmp')

从那里,您可以以正常的 Image.open 方式将其加载到 PIL 中。

如果您仔细研究文档,您应该能够避免 IO 步骤并在内存中完成所有操作(如果您愿意)。 PIL 有一个 from frombuffer 方法,您可以使用该方法将 GetBitmapBits 的结果转换为 Image 对象。

关于python - 如何从EXE中提取32x32图标位图数据并将其转换为PIL Image对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19760913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com