Получение изображения экрана для работы
Я пытаюсь получить imagegrabscreen
(функция GD) для работы с моим компьютером Apache/Vista.
Я использую следующий код:
<?php
$im = imagegrabscreen();
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
?>
На данный момент я получаю сплошное черное изображение, размер моего дополнительного монитора (1024*768). Я использую Apache 2.2, работающий как сервис, Vista SP1 с отключенным UAC, PHP 5.2.8 и GD (информация ниже). Я следил за запиской на imagegrabscreen
страница о предоставлении доступа Apache к рабочему столу. Я также перезапустил службу и сервер apache. Я получаю те же результаты с imagegrabwindow
,
Это ошибка (у других людей проблемы с запуском этого метода?) Или я что-то не так делаю?
Array
(
[GD Version] => bundled (2.0.34 compatible)
[FreeType Support] => 1
[FreeType Linkage] => with freetype
[T1Lib Support] => 1
[GIF Read Support] => 1
[GIF Create Support] => 1
[JPG Support] => 1
[PNG Support] => 1
[WBMP Support] => 1
[XPM Support] =>
[XBM Support] => 1
[JIS-mapped Japanese Font Support] =>
)
Apache Service Log Подробности:
4 ответа
Я посмотрел на источник для imagegrabscreen();
на данный момент, я считаю, что это терпит неудачу, потому что у нас обоих есть настройки нескольких мониторов.
Текущий код вызывает GetDC(0), который, согласно http://msdn.microsoft.com/en-us/library/dd144871(VS.85).aspx должен возвращать контекст устройства для "всего экрана", но " Чтобы получить DC для определенного монитора, используйте функции EnumDisplayMonitors и CreateDC ".
Я собираюсь сделать немного больше тестирования этого и посмотреть, смогу ли я придумать код для нескольких мониторов.
Я вижу проверенный ответ Хью, и мне любопытно, если кто-нибудь решил это за последние 3 года? Я выполнил шаги "разрешить службе взаимодействовать с рабочим столом" и использую ноутбук, к которому иногда подключаю второй монитор. Хотя, когда я использую сценарий, с которым я пытаюсь заставить это работать, я буду только на главном мониторе моего ноутбука. Я работаю под управлением Windows 7 64bit, с WAMP Server 2.2. Расширение php_gd2 проверено, и оно работает с сохранением файла. Но независимо от того, что я пытаюсь, и все выводы, я не могу заставить эту вещь сделать скриншот правильно, он всегда возвращает черный экран. Я также попробовал основной код, представленный в этом примере (хотя мой в любом случае был почти таким же).
Если кто-нибудь может дать мне решение, если он найдет его, пожалуйста, дайте мне знать, я был бы признателен. Я даже пытался запустить WAMP в режиме совместимости с XP и Vista:/ (я где-то читал, что функция imagegrabscreen работает только с XP/Vista. В конечном итоге я пытаюсь создать небольшой легкий скрипт, который я мог бы запустить в фоновом режиме для мониторинга прогресс над проектом, над которым я работаю, который просто делает снимок экрана, немного его масштабирует, а в конце моей работы он архивирует файлы и передает их пользователю по электронной почте. Все остальное работает легко, но я впервые использую функцию imagegrabscreen, и, как бы круто это не звучало, она теперь пришла мне в голову, потому что я не могу заставить ее просто делать свою работу...:(
Я думаю imagegrabscreen()
работает только в Windows XP, а не в Vista.
Вы должны проверить эту ссылку
Я продублировал эту ошибку - WinXP SP3, Apache 2.2.11, работающий как сервис, PHP 5.2.8, GD 2.0.34 в комплекте.
Я разрешил взаимодействие с рабочим столом и перезапустил сервис. На установке с двумя экранами (основной: 1440x900, дополнительный: 1920x1200) я получаю черный прямоугольник размером с основной экран. У меня есть отчет об ошибках, повернутый вправо (E_ALL | E_STRICT), и XDebug не сообщает об ошибках.
Кто-нибудь еще хочет сделать снимок в этом? Наиболее важными переменными являются ОС (Win2000/WinXP/Win2003/Vista) и версия PHP (5.2.2/.3/.4/.5/.6/.8).
Я собираюсь взглянуть на источник для imagegrabscreen().