使用imagegrabscreen和Wamp捕获图像

时间:2012-01-19 00:31:35

标签: php apache gd screen-capture

我正在尝试使用imagegrabscreen捕获本地网页,但我只获得了黑色屏幕截图。我在SO和其他网站上尝试了几乎所有问题的解决方案,没有任何效果。

我正在使用并完成以下操作:

  • Windows 7 64位
  • Wamp 2.2a 64bit
  • PHP 5.3.8
  • gd2(版本:“捆绑2.0.34兼容”)已安装并启用。
  • 允许apache服务与桌面交互。
  • 我没有辅助显示器或任何东西。
<?php    
   $im = imagegrabscreen();    
   imagepng($im, "myscreenshot.png");    
   imagedestroy($im);    
?>

我得到的只是一张1024x768 png的黑色图片。

3 个答案:

答案 0 :(得分:2)

你可以做到。我这样做了我没有使用WAMP。我把一切都分开了。我有所有PHP,MySQL和Apache设置。

以下是步骤。

  1. 停止Apache服务器服务。你可以通过调用

    来做到这一点
    NET STOP Apache2.2
    

    或者您可以打开services.msc然后停止它。

  2. Apache2.2文件夹复制出C:\将其置于您拥有完全访问权限的位置。像Documents或其他驱动器。我把它放在K:中。确保您拥有完全访问权限,

    1. 递归获取Apache目录的所有权。
    2. 确保Full control文件夹的安全标签上标有Apache2.2个标记。
    3. 这个新的Apache配置文件httpd.conf将包含许多硬编码路径。像C:\apache software foundation\apache2.2一样。只需用新路径替换它们即可。就我而言,它是K:\Apache2.2
  3. 此时应停止Apache服务器服务。所以80端口不会被阻止。您将在您自己的区域(目录)中拥有您自己的 Apache。

  4. 打开控制台窗口,使用htdocs

  5. 转到cd文件夹所在的Apache主页以及其他一些文件夹
  6. 运行bin\httpd.exe。这意味着正在运行Apache。 拥有对桌面的完全访问权限。 可以做任何事情,httpd.exe
  7. 也是如此
  8. 打开您的网页。使用以下代码。

    <?php
    header("Content-type: image/png");
    $im = imagegrabscreen();    
    imagepng($im);
    imagedestroy($im); 
    exit(0);
    ?>
    
  9. 您会看到图片。

答案 1 :(得分:1)

这是来自php.net手册页上对imagegrabscreen()的评论;尝试一下,看看它是否解决了问题,听起来就像你遇到的那样:

  

为此,您的Apache服务必须设置为“允许服务与桌面交互”,否则您将获得一个空白图像。

实际进行更改:

  • 以管理员身份运行命令services.msc
  • 在列表中找到Apache服务,右键单击并选择“属性”
  • 单击“登录”选项卡
  • 更改服务以使用本地系统帐户(如果尚未
  • 选中显示Allow this service to interact with the desktop
  • 的复选框
  • 重新启动Apache服务。

答案 2 :(得分:0)

如果您在使用imagegrabscreen()时遇到问题,可能需要尝试使用Windows命令行工具捕获boxcutter之类的屏幕。然后使用PHP exec()函数来调用它。例如:

<?php

$exec = exec('boxcutter -f image.png'); // -f is full screen option