Скриншот Python для Windows 7 без PIL - PullRequest
17 голосов
/ 04 января 2011

Я хочу сделать снимок экрана с использованием python.

Я пытался использовать PIL, но поскольку я использую 64-битные окна, а python PIL не работает (я мог только найти 32-битные версии PIL).Кстати, я использую Python 2.7.1.

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

Основная проблема, кажется, в том, что я работаю на 64-битной системе, и многие вещи кажутся несовместимымитот.Я действительно не хочу возвращаться к 32-битному, хотя, если это вообще возможно.Существуют ли программы или модули, которые могут это сделать?

Ответы [ 3 ]

33 голосов
/ 04 января 2011

Получите PIL для win-amd64-py2.7 при http://www.lfd.uci.edu/~gohlke/pythonlibs/#pil.

from PIL import ImageGrab
im = ImageGrab.grab()
im.save('screenshot.png')

Обновление: используйте pywin32 (http://sourceforge.net/projects/pywin32/) вместо PIL, чтобы делать скриншоты нескольких виртуальных экранов:

import win32gui, win32ui, win32con, win32api
hwin = win32gui.GetDesktopWindow()
width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN)
height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN)
left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN)
top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN)
hwindc = win32gui.GetWindowDC(hwin)
srcdc = win32ui.CreateDCFromHandle(hwindc)
memdc = srcdc.CreateCompatibleDC()
bmp = win32ui.CreateBitmap()
bmp.CreateCompatibleBitmap(srcdc, width, height)
memdc.SelectObject(bmp)
memdc.BitBlt((0, 0), (width, height), srcdc, (left, top), win32con.SRCCOPY)
bmp.SaveBitmapFile(memdc, 'screenshot.bmp')
1 голос
/ 16 марта 2018

У меня возникла та же проблема на PIL или pyscreenshot, вот как я ее решил.

Щелкните правой кнопкой мыши python.exe, Свойства, вкладка «Совместимость», установите флажок «Отключить масштабирование экрана при настройках с высоким DPI».Повторите для pythonw.exe.

1 голос
/ 04 января 2011

32- или 64-битная Windows здесь не имеет значения; важна «битность» Python и его модулей. Если вы используете 32-битный скомпилированный Python, 32-битный скомпилированный PIL будет отлично работать в 64-битной Windows.

С другой стороны, если вы используете 64-битный скомпилированный Python, вам нужно найти или скомпилировать пользовательскую 64-битную версию PIL для соответствия.

Edit:

Вы можете загрузить 64-битную версию PIL из http://www.lfd.uci.edu/~gohlke/pythonlibs/, в частности, вам нужна PIL-1.1.7.win-amd64-py2.7.‌exe

...