【问题标题】:PHP imagegrabwindow GD Library returns only black imagesPHP imagegrabwindow GD 库仅返回黑色图像
【发布时间】:2009-10-08 21:16:35
【问题描述】:

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

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

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

经过进一步调查,我了解到图像为黑色的原因之一是没有打开 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");

任何帮助将不胜感激!

谢谢

我已将代码修改为:Social Addict 仍然没有成功,图像以黑色显示!

  <?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);
?> 

Social Addict - 我添加了标题 - 我还不断更改 file1.jpg 名称以确保它没有使用黑色缓存图像...仍然没有运气!

【问题讨论】:

  • 您要的是 png 还是 jpg?
  • 尝试设置标题信息,正如我现在在我的帖子中显示的那样,并直接通过浏览器访问您的 php 文件,看看会发生什么
  • 不确定是否有区别,但将标题行放在图像输出之前,即 imagejpeg()
  • 也许你需要通过“dcomcnfg”为 InternetExplorer DCOM 对象设置执行权限

标签: php gd


【解决方案1】:

我以前遇到过这个问题,通常是在您尝试加载图像或将图像转换为不正确的类型时引起的

我认为这可能与这条线有关

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

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

按照您的要求尝试以下操作jpeg

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

改为

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

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

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

这也是来自PHP.NET的另一个已知问题

这个函数在运行时非常缓慢 我在我的机器上测试它。它 花了大约 2 或 3 秒 返回一个图像。它也无法正常工作 如果 Apache 服务没有 访问“与桌面交互”

【讨论】:

  • 我已将其更改为 imagepng($im, "iesnap6.pmh");以及获得相同的黑色图像 - 我没有安装 Appache,只运行“IIS”作为我的网络服务器 - 这让我觉得我应该以某种方式允许 IIS“与桌面交互”
  • 我的意思是 imagepng($im, "iesnap6.png"); (拼写更正)
  • 转到您的 iis 设置并允许与桌面交互。但是您刚刚写的那行与我的建议不符... imagejpeg($im,"file.jpg");
  • 感谢 SocialAddict - 将其更改为 imagejpeg($im,"file.jpg"); (仍然是黑色图像)在设置中我找不到 IIS 作为服务并假设它是万维网发布服务并允许“与桌面交互”重新启动并确保服务正在运行 - 但仍然得到黑色图像...
  • 您需要在 imagejpeg() 调用之前调用浏览器提交命令 - 或者 php.net 上的示例似乎是:php.oregonstate.edu/manual/en/function.imagegrabwindow.php
【解决方案2】:

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

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

【讨论】:

  • 我在运行Vista-->Services->World Wide Web Publishing Service-> LoginTab -> Allow to interact with desktop 假设和[IIS and WWWPub...]一样不要让 [IIS 和 WWWPub...] 重新启动我的机器并检查服务是否重新启动...仍然得到黑色图像
【解决方案3】:

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

【讨论】:

  • 感谢您回复我 Jass - 问题之一是我的服务器只处理 16 位
【解决方案4】:

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

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

Basic 版提供的灵活性不如付费版,但基本版满足了我的需求。它也可能在非 Windows 系统上工作,但我没有尝试过。

【讨论】:

    【解决方案5】:

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

    我更新了服务器硬件并安装了 32 位显卡,现在它可以正常工作了。

    【讨论】:

      【解决方案6】:

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

      1. 右键单击桌面上的“[我的]电脑”,选择“管理”
      2. 在“服务和应用程序”下,双击服务
      3. 找到您的 Apache 服务(可能是 IIS)并右键单击,选择属性
      4. 在“登录”选项卡中,确保“允许服务与桌面交互”已启用
      5. 单击“确定”,关闭,然后重新启动 Apache(或 IIS)

      如果你没有这个,那么 Apache 无法与你的计算机桌面通信并返回一个空白图像。

      【讨论】:

        【解决方案7】:

        “Content-Type”中的“t”需要大写。

        之前:

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

        之后:

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

        它现在对我有用..

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-09-02
          • 2011-02-11
          • 2015-06-20
          • 2014-04-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多