PHP imagegrabwindow GD Library只返回黑色图像

时间:2009-10-08 21:16:36

标签: php gd

我希望有人可以帮助我和其他许多人解决这个问题...

我想使用php和GD库的imagegrabwindow函数部分创建网站的屏幕截图

在花了一整天实现代码后,我终于可以捕获图像并将其保存到文件中,但图像是黑色的,而不是我期望的图像......

在进一步研究中,我了解到图像为黑色的原因之一是因为没有打开apache与桌面交互 - 而且因为这会产生黑色图像 - 问题是我没有运行Apache作为我正在运行IIS 6的服务器......

服务中是否有允许与桌面交互的设置?如果有人能指出我正确的方向吗?

<?php
    $browser = new COM("InternetExplorer.Application");
    $handle = $browser->HWND;
    $browser->Visible = true;
    $browser->Fullscreen = true;
    $browser->Navigate("http://localhost/site/advertise/index.asp");

    /* Still working? */
    while ($browser->Busy) {
        com_message_pump(4000);
    }
    $im = imagegrabwindow($handle, 0);
    imagepng($im, "iesnap6.jpg");
    $browser->Quit();
    ?> 

感谢下面的答案,我已将imagepng更改为imagejpeg - 但仍然会获得黑色图像......

imagejpeg($im, "iesnap7.jpg");

非常感谢任何帮助!

由于

我已经修改了这个代码:社交上瘾仍然没有成功,黑色中出现的图像!

  <?php
 header('Content-type: image/jpeg');
$browser = new COM("InternetExplorer.Application");
$handle = $browser->HWND;
$browser->Visible = true;
$browser->Navigate("http://localhost/advertise/index.asp");

/* Still working? */
while ($browser->Busy) {
    com_message_pump(4000);
}
$im = imagegrabwindow($handle, 0);
$browser->Quit();
imagejpeg($im," file2.jpg");
imagedestroy($im);
?> 

社交瘾君子 - 我添加了标题 - 我也不断更改file1.jpg名称,以确保它不使用黑色缓存图像......仍然没有运气!

7 个答案:

答案 0 :(得分:2)

之前我遇到过此问题,并且经常在您尝试将图片加载或转换为错误类型时导致

我认为这可能与此行有关

imagepng($im, "iesnap6.jpg");

您将其保存为png并将其命名为jpg。

根据您的说法,请尝试以下jpeg

imagejpeg($im, "iesnap6.jpg"); 

代替

尝试在imagejpeg调用之前设置标题类型:

header('Content-type: image/jpeg');

然后直接从浏览器访问脚本,看看是否有效?

这也是PHP.NET

中的另一个已知问题
  

这个功能很痛苦   我在我的机器上测试它。它   它花了大约2或3秒钟   返回图像。它也无法工作   如果Apache服务没有   访问“与桌面交互”

答案 1 :(得分:0)

是否允许IIS和WWW Publishingservice与桌面交互?

我的电脑 - &gt;管理 - &gt;服务 - &gt; [IIS和WWWPub ...] - &gt; LoginTab - &gt;允许与桌面交互

答案 2 :(得分:0)

我遇到了同样的问题,请尝试将颜色分辨率更改为32位,然后重试。

答案 3 :(得分:0)

我遇到了imagegrabwindow()的问题。最终,在找不到问题的帮助后,我决定看看我是否可以编写现有的页面捕获插件或扩展脚本。我发现Firefox的Pearl Crescent Page Saver可以从命令行编写脚本。

http://pearlcrescent.com/products/pagesaver/doc/#commandline

Basic版本比付费版本的灵活性更低,但基本版本满足了我的需求。它也可以在非Windows系统上运行,但我还没有尝试过。

答案 4 :(得分:0)

我早就发现了这个问题:主要问题是我的专用服务器没有安装32位显卡。这导致图像显示黑色......

我更新了我的服务器硬件并安装了32位显卡,现在它没有任何问题。

答案 5 :(得分:0)

我刚刚找到了一个可能对大多数人有帮助的答案。摘自PHP.net上的评论员: http://www.php.net/manual/en/function.imagegrabscreen.php

  1. 右键单击桌面上的“[我的]计算机”,选择“管理”
  2. 在“服务和应用程序”下,双击“服务”
  3. 找到您的Apache服务(可能是IIS)并右键单击,选择属性
  4. 从“登录”标签中,确保已启用“允许服务与桌面交互”
  5. 单击“确定”,关闭,然后重新启动Apache(或IIS)
  6. 如果您没有这个,那么Apache无法与您的计算机桌面通信并返回空白图像。

答案 6 :(得分:0)

'Content-Type'中的't'需要是资本。

在:

header('Content-type: image/jpeg');

后:

header('Content-Type: image/jpeg');

现在对我有用..