【问题标题】:How to take screenshot of current window using PHP?如何使用 PHP 截取当前窗口的屏幕截图?
【发布时间】:2015-07-20 05:23:21
【问题描述】:

我正在尝试使用 PHP Nightrain 准备桌面应用程序。 我想每隔 10 秒对打开的窗口进行一次屏幕截图。我尝试使用 html2canvas,但它正在截取应用程序打开页面的屏幕截图。 如果那时我将打开 Microsoft Word 并在其中工作,我想要使用 PHP 对其进行屏幕截图。 可以使用PHP吗? 还有一件事我想使用与操作系统兼容的 PHP 制作桌面应用程序。

【问题讨论】:

  • 不,这是不可能的,除非 PHP 代码在客户端机器上运行(不太可能,因为 PHP 通常在服务器端运行)。您正在尝试的是一个严重的隐私问题,这可能是不存在此类 API 的原因。您可以做到这一点的唯一方法是通过浏览器扩展和/或 NSAPI/PPAPI/ActiveX 小程序。
  • 使用 PHP Nightrain 应用程序将像桌面应用程序一样运行,它不在浏览器中运行。如果我运行 PHP Nightrain 的 exe 文件,它会打开一个窗口。
  • 在这种情况下,如果 Nightrain 没有这样的 API,您可能可以使用 shell_exec 等调用外部可执行文件。OS X 有一个内置命令。关于其他操作系统的 IDK。

标签: javascript php jquery


【解决方案1】:

这不能单独使用 php 完成。您将需要 javascript 来截取屏幕截图,将其转换为字符串并通过 ajax 将其发送到 php 脚本,然后该脚本将保存内容。

为此,您可以使用此库 http://html2canvas.hertzen.com/。现在神奇的事情发生在接下来的几行代码中:

// an example html page
<!DOCTYPE html>
<html>
<head>
    <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>
    <script type="text/javascript" src="./javascripts/html2canvas.js"></script>
    <script type="text/javascript">
        $(document).ready(function(){
            $('#screenshot').on('click', function(e){
                e.preventDefault();
                html2canvas($('body'), {
                    onrendered: function(canvas){
                        var imgString = canvas.toDataURL();
                        window.open(imgString);
                        $.ajax({
                            url: '',
                            type: 'POST',
                            data: {
                                file: imgString
                            },
                            success: function(response){
                                //alert('Everything works fine.');
                            },
                            error: function(response){
                                //alert('Server response error.');
                            }
                        });
                    }
                });
            });
        });
    </script>
</head>
<body>

就 IE 7 和 8 的支持而言 - 谷歌(和其他大型网站)已声明最多支持 1 个最新版本。所以,如果当前版本是 10,他们将只支持 9 和 10。我相信这是一个很好的做法,我也在与我的客户一起使用它。如果您正在开发高级网页,那么使用 IE Modernizrhtml5shiv,这可能会帮助您将 html5 支持带到即。

【讨论】:

  • “我尝试使用 html2canvas,但它正在截取应用程序打开页面的屏幕截图。如果我打开 Microsoft Word 并在其中工作,我想要使用 PHP 截屏。”
  • 我已经尝试使用 html2canvas 但它正在运行应用程序的页面。我希望 PHP 应用程序每 10 秒运行一次,并在我在系统中工作时截屏。
【解决方案2】:

只能在服务器上工作,看看这个怎么样:

<?php
// capture the screen
$img = imagegrabscreen();
imagepng($img, 'screenshot.png');
?>

<?php
// Capture the browser window
$Browser = new COM('InternetExplorer.Application');
$Browserhandle = $Browser->HWND;
$Browser->Visible = true;
$Browser->Fullscreen = true;
$Browser->Navigate('http://www.stackoverflow.com');

while($Browser->Busy){
  com_message_pump(4000);
}

$img = imagegrabwindow($Browserhandle, 0);
$Browser->Quit();
imagepng($img, 'screenshot.png');
?>

搜索对于快速回答很有用;)

Website screenshots using PHP

【讨论】:

  • 它捕获浏览器窗口,但我想捕获系统打开的窗口。这仅适用于 Windows。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-17
  • 1970-01-01
  • 2020-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多