29 марта 2010 г.

Создание скриншота рабочего стола

Вот я и узнал, как можно создать скриншот всего десктопа. Алгоритм аналогичен используемому в статье "Создание скриншота программы", за исключением того, что вместо конкретного виджета мы будем использовать корневое окно, т.е. рабочий стол, доступ к которому можно получить через Gdk::get_default_root_window(). Далее методом get_size() узнаем размеры монитора и напечатаем их в консоль. Ну а непосредственно про создание скриншота я уже рассказывал. Остаётся добавить только то, что в самом начале программы необходимо прописать следующий цикл:
while (Gtk::events_pending())
{
Gtk::main_iteration();
}

Это необходимо для того, чтобы убедиться, что все виджеты отображаются на экране.





Полный код программы:

<?php
 
while (Gtk::events_pending())
{
Gtk::main_iteration();
}
 
$root = Gdk::get_default_root_window();
list($width, $height) = $root->get_size();
 
echo 'Разрешение монитора: ' . $width . 'x' . $height . "\r\n";
 
$pixbuf = new GdkPixbuf(Gdk::COLORSPACE_RGB, TRUE, 8, $width, $height);
$pixbuf->get_from_drawable($root, $root->get_colormap(), 0, 0, 0, 0, $width, $height);
$pixbuf->save('screenshot.png', 'png');
 
?>

3 комментария:

LegioNemesis комментирует...

Кстати в ПХП, а именно в библиотеке ГД есть ф-ции:
http://ca.php.net/manual/en/function.imagegrabwindow.php —
для снятия снимка окна программы и
http://ca.php.net/manual/en/function.imagegrabscreen.php — для снимка всего экрана.

Shecspi комментирует...

Интересно, что именно зафиксирует imagegrabwindow(), какое окно? А с imagegrabscreen() у меня тоже связан один интересный вопрос: получается, можно сделать снимок экрана удаленного сервера, на котором запускается скрипт? А если на этом сервере не установлены иксы, т.е. никакого графического окружения нет, а вся настройка ведется из консоли, тогда что? Лично мне не понятно наличие данных функций в библиотеке gd.
Кстати, пакет php-gd отсутствует в стандартном репозитории Ubuntu, насколько я помню, из-за каких-то проблем с безопасностью.

LegioNemesis комментирует...

Я виноват, что сразу не написал. Эти ф-ции доступны только для Виндовс платформ.