пятница, 17 июня 2011 г.

Скриншот консоли



В комментариях к одному из постов в жж во френдленте прозвучал, точнее, был написан, вопрос типа "а можно сделать скриншот консоли?". Разумеется, нельзя, консоль - это же текстовый режим вывода, какой скриншот? Ну, я не имею в виду всякие программы типа konsole, terminal и xterm, эмулирующие консоль. Там-то графика, и скриншот сделать можно.

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

Вот что у меня получилось.
Файл make_screenshot.php:
<?

// получить текстовый буфер консоли в файл
`setterm -dump`;

// прочитать файл
$text = explode("\n", file_get_contents('screen.dump'));
// высота картинки
$img_height = sizeof($text) * 10;
$max_strlen = 0;
foreach($text as $str)
{
$max_strlen = max($max_strlen, strlen($str));
}
// ширина картинки
$img_width = $max_strlen * 8;
$image = imagecreatetruecolor($img_width, $img_height);
$i = 0;
// белый цвет
$c = imagecolorallocate($image, 255, 255, 255);
// текст в картинку построчно
foreach($text as $str)
{
imagestring($image, 2, 0, $i * 10, $str, $c);
$i++;
}
// сохранить шедевр
imagejpeg($image, 'screen.dump.jpg');

?>


47.12 КБ

Ограничения: этот метод заработал у меня только из-под рута и только в текстовой консоли. Никаких pts/0 и terminal. Всё дело в команде setterm -dump, которая пытается достать текст из /dev/vcsa0, куда ординарному пользователю соваться запрещено, и куда, походу, не попадает текст из графического эмулятора консоли terminal. Возможно, в другой операционной системе или даже другом дистрибутиве линукса этих ограничений не будет или они будут другими.

Комментариев нет:

Отправка комментария

Ублюдочный Гугл поломал форму комментариев. Извините.