使用 imagegrabscreen 和 Wamp 捕获图像

发布于 2024-12-27 21:12:16 字数 468 浏览 1 评论 0原文

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

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

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

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

I'm trying to capture a local web page with imagegrabscreen but I only get a black screenshot. I tried almost every solution from questions here on SO and others sites and nothing works.

I'm using and done the following:

  • Windows 7 64bit
  • Wamp 2.2a 64bit
  • PHP 5.3.8
  • gd2 (version: "bundled 2.0.34 compatible") is installed and enabled.
  • Allowed the apache service to interact with the desktop.
  • I don't have a secondary display or anything.
<?php    
   $im = imagegrabscreen();    
   imagepng($im, "myscreenshot.png");    
   imagedestroy($im);    
?>

And all I get is a black image 1024x768 png.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

别挽留 2025-01-03 21:12:16

你可以做到的。我这样做了。我没有使用WAMP。我单独使用了所有东西。我已经安装了所有 PHP、MySQL 和 Apache。

以下是步骤。

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

    来完成此操作

    NET STOP Apache2.2
    

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

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

    1. 递归获取 Apache 目录的所有权。
    2. 确保您在 Apache2.2 文件夹的安全选项卡上勾选了完全控制
    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. 打开您的网页。使用以下代码。

    <前><代码>

  7. 您将看到该图像。

You can do it. I did this. I didn't use WAMP. I used everything separate. I have all PHP, MySQL and Apache setup.

Here are the steps.

  1. Stop the Apache server service. You can do this by invoking

    NET STOP Apache2.2
    

    or you can open the services.msc then stop it.

  2. Copy the Apache2.2 folder out of C:\. Put it somewhere where you have full access. Like Documents or in other drive. I put it in K:. To be sure you have full access,

    1. Recursively get ownership of the Apache directory.
    2. Make sure You have Full control marked tick on security tab of the Apache2.2 folder.
    3. This new Apache's configuration file httpd.conf will contain a lot of hardcoded paths. Like C:\apache software foundation\apache2.2. Just replace those with your new path. In my case it was K:\Apache2.2.
  3. At this moment your Apache Server Service should be stopped. So 80 port will not be blocked. And you'll have your own Apache at your own territory (directory).

  4. Open a console window and go to your Apache home where htdocs folder resides along with some other folders using cd

  5. Run bin\httpd.exe. This means you are running Apache. You have full access to your desktop. You can do anything, so do httpd.exe
  6. Open your web page. With following code.

    <?php
    header("Content-type: image/png");
    $im = imagegrabscreen();    
    imagepng($im);
    imagedestroy($im); 
    exit(0);
    ?>
    
  7. You'll see the image.

也只是曾经 2025-01-03 21:12:16

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

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

要实际进行更改:

  • 以管理员身份运行命令 services.msc
  • 在列表中找到 Apache 服务,右键单击并选择“属性”
  • 单击“登录”选项卡
  • 如果尚未使用本地系统帐户,则将服务更改为使用本地系统帐户
  • 选中显示允许此服务与桌面交互的框< /代码>。
  • 重新启动 Apache 服务。

This is from a comment on the php.net manual page for imagegrabscreen(); try it and see if it fixes the issue, it sounds like what you're running into:

For this to work your Apache service must be set to 'Allow service to interact with desktop' otherwise you will just get a blank image.

To actually make the change:

  • Run the command services.msc as Admin.
  • Find the Apache service in the list, right click and select Properties
  • Click the Log On tab
  • Change the service to use a local system account if it isn't already
  • Check the box that says Allow this service to interact with the desktop.
  • Restart the Apache service.
少女净妖师 2025-01-03 21:12:16

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

<?php

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

If you are having trouble with imagegrabscreen() you may want to try a windows command line tool to capture the screen like boxcutter. Then use the PHP exec() function to call it. ex:

<?php

$exec = exec('boxcutter -f image.png'); // -f is full screen option
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文