Получение изображения экрана для работы

Я пытаюсь получить 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 Подробности:

http://www.kalleload.net/uploads/maogfnfnczfh.png

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().

Другие вопросы по тегам