【问题标题】:Capture image with imagegrabscreen and Wamp使用 imagegrabscreen 和 Wamp 捕获图像
【发布时间】:2012-02-13 17:28:33
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你有图形服务器在运行吗(XFree86、X11)?
  • @knittl:嗯,不,它是 Windows 7 正常运行,没有其他任何东西。
  • 无论你在做什么,我希望它不会上线。 Windows 作为服务器很糟糕,并且开箱即用存在几个安全问题。坚持使用灯服务器或其他东西。
  • @AdamSack:感谢您的回复,但谢天谢地,这对生产服务器或任何东西都没有影响,这只是我想要完成的个人任务,但手动完成需要我的岁月:P
  • 你安装了哪个版本的gd2 lib?请将版本添加到您的问题列表中-

标签: php apache gd screen-capture


【解决方案1】:

你可以做到。我这样做了。我没有使用 WAMP。我把所有东西都分开了。我已经安装了所有 PHP、MySQL 和 Apache。

这里是步骤。

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

    NET STOP Apache2.2
    

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

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

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

  4. 打开一个控制台窗口并使用 cd 转到您的 Apache 主页,其中 htdocs 文件夹以及其他一些文件夹

  5. 运行bin\httpd.exe。这意味着正在运行 Apache。 拥有对您桌面的完全访问权限。 可以做任何事,httpd.exe
  6. 打开您的网页。使用以下代码。

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

【讨论】:

  • 我忘了测试任何最新答案是否有效,但我明天再试一次,如果有效,我会奖励赏金
【解决方案2】:

这是来自 php.net 手册页上 imagegrabscreen() 的评论;试试看它是否能解决问题,听起来像你遇到的问题:

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

真正做出改变:

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

【讨论】:

  • 这是我之前做的,以管理员身份运行 services.msc,然后在登录选项卡('wampapache'服务的)中选择第一个半径并选中该框,应用,确定,然后重新启动服务,我仍然得到一个黑色图像作为屏幕截图。
【解决方案3】:

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

<?php

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

【讨论】:

    猜你喜欢
    • 2010-12-16
    • 2012-08-17
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多