我正在尝试从 EXE 中提取 32x32 图标,并将位图数据转换为 PILImage
目的。我的最终目标是将图标与另一个 32x32 PNG 进行比较,并通过 RMS 获得差异。
我试过做win32gui.ExtractIconEx()
then win32gui.GetIconInfo()
并试图Image.open()
对此,但 PIL 显然不接受 PyHANDLE 对象。我也尝试过直接打开exeImage.open()
,显然这是行不通的。
我现在很困惑,有没有什么办法可以在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')
从那里,您可以将其加载到PIL
在正常情况下Image.open
时尚。
如果您仔细研究文档,您应该能够避免 IO 步骤并在内存中完成所有操作(如果您愿意)。PIL
有一个来自frombuffer
您可以用来转换结果的方法GetBitmapBits
to an Image
目的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)