首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 使用 imagegrabscreen 與 imagegrabwindow 實現網頁截圖

     編輯:PHP 相關知識

PHP 使用 imagegrabscreen 與 imagegrabwindow 實現網頁截圖

PHP 的 imagegrabscreen() 與 imagegrabwindow() 函數結合 COM 元件,可在 Windows 環境下透過控制 Internet Explorer 實現網頁截圖功能。本文提供四種常見應用場景的完整程式碼範例,並說明常見失敗原因與解決方案。

前置需求

  • 作業系統:Windows Server / Windows 桌面版
  • 已安裝 Internet Explorer
  • PHP 啟用 php_com_dotnet.dll 擴展
  • Apache 服務需勾選「允許服務與桌面互動」

範例一:截取完整螢幕畫面

<?php
$im = imagegrabscreen();
imagepng($im, "myscreenshot.png");
?>

範例二:截取指定視窗(以 IE 為例)

<?php
$browser = new COM("InternetExplorer.Application");
$handle = $browser->HWND;
$browser->Visible = true;
$im = imagegrabwindow($handle);
$browser->Quit();
imagepng($im, "iesnap.png");
$im = imagegrabscreen(); // 可選:再截一次全螢幕
?>

範例三:截取 IE 載入網頁後的內容畫面

<?php
$browser = new COM("InternetExplorer.Application");
$handle = $browser->HWND;
$browser->Visible = true;
$browser->Navigate("https://www.jb51.net");

// 等待頁面載入完成
while ($browser->Busy) {
    com_message_pump(4000);
}

$im = imagegrabwindow($handle, 0); // 0 表示包含客戶區內容
$browser->Quit();
imagepng($im, "iesnap.png");
?>

範例四:全螢幕模式截取

<?php
$browser = new COM("InternetExplorer.Application");
$handle = $browser->HWND;
$browser->Visible = true;
$browser->FullScreen = true;
$browser->Navigate("https://www.jb51.net");

while ($browser->Busy) {
    com_message_pump(4000);
}

$im = imagegrabwindow($handle, 0);
$browser->Quit();
imagepng($im, "iesnap.png");
?>

常見問題:截出來是純黑圖片?

若執行結果為全黑圖片,通常有兩個原因:

  1. 非 Windows 環境:此功能依賴 Windows COM 元件與 IE,Linux/macOS 無法使用。建議改用 headless Chrome (Puppeteer) 或 wkhtmltoimage 等跨平台方案。
  2. Apache 未啟用「與桌面互動」:此為最常見原因。解決步驟:
    1. 右鍵「我的電腦」→「管理」→「服務」
    2. 找到 Apache 服務(如 Apache2.4)右鍵「內容」
    3. 切換「登入」分頁,勾選「允許服務與桌面互動」
    4. 重新啟動 Apache 服務

現代替代方案建議

考慮到 IE 已停止支援、跨平台需求與維護性,建議新專案採用以下方案:

  • Puppeteer (Node.js):控制 Headless Chrome/Chromium,功能強大、支援現代 Web 標準。
  • Chrome DevTools Protocol:各語言均有客戶端庫(如 PHP 的 chrome-php/chrome)。
  • wkhtmltoimage:輕量級命令列工具,基於 Qt WebKit,部署簡單。
  • 第三方 API:如 Screenshotlayer, ApiFlash 等雲端截圖服務。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved