418

PHP で Web サイトのスクリーンショットを撮り、それをファイルに保存する方法はありますか?

4

18 に答える 18

288

最終編集:7年経った今でもこの回答に賛成票を集めていますが、これは今でははるかに正確になっていると思います。


確かにできますが、ページを何かでレンダリングする必要があります。本当にphpのみを使用したい場合は、HTMLTOPSをお勧めします。これは、ページをレンダリングしてpsファイル(ゴーストスクリプト)に出力し、.jpg、.png、.pdfに変換します..複雑なページ (すべての CSS をサポートしているわけではありません)。

それ以外の場合は、wkhtmltopdf を使用して html ページを pdf、jpg などで出力できます。CSS2.0を受け入れ、webkit (safari のラッパー) を使用してページをレンダリングします。サーバーにもインストールする必要があります..

更新新しい HTML5 および JS 機能により、JavaScript を使用してページをキャンバス オブジェクトにレンダリングすることも可能になりました。これを行うための優れたライブラリ: Html2Canvasと、G+ のようなフィードバックを得るための同じ作成者による実装です。DOM をキャンバスにレンダリングしたら、ajax 経由でサーバーに送信し、jpg として保存できます。

編集: imagemagick ツールを使用して、pdf を png に変換できます。私のバージョンの wkhtmltopdf は画像をサポートしていません。例convert html.pdf -append html.png

EDIT :この小さなシェル スクリプトは、php5-cli と上記のツールを使用した Linux での単純な / しかし動作する使用例を提供します。

編集:wkhtmltopdfチームが別のプロジェクトに取り組んでいることに気付きました:wkhtmltoimageは、jpgを直接提供します

于 2009-04-16T19:48:50.847 に答える
88

PHP 5.2.2から、PHP だけで Web サイトをキャプチャすることが可能になりました

imagegrabscreen — 画面全体をキャプチャします

<?php
$img = imagegrabscreen();
imagepng($img, 'screenshot.png');
?>

imagegrabwindow - ウィンドウ ハンドル (COM インスタンスの HWND プロパティ) を使用して、ウィンドウまたはそのクライアント領域を取得します。

<?php
$Browser = new COM('InternetExplorer.Application');
$Browserhandle = $Browser->HWND;
$Browser->Visible = true;
$Browser->Fullscreen = true;
$Browser->Navigate('http://www.stackoverflow.com');

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

$img = imagegrabwindow($Browserhandle, 0);
$Browser->Quit();
imagepng($img, 'screenshot.png');
?>

編集:注: これらの機能は Windows システムでのみ使用できます。

于 2010-12-24T14:31:30.283 に答える
58

サードパーティのツールを使用したくない場合は、Google Page Insight api を使用する簡単なソリューションを見つけました。

params で api を呼び出すだけですscreenshot=true

https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=https://stackoverflow.com/&key={your_api_key}&screenshot=true

パラメータのモバイル サイト ビュー パス&strategy=mobileの場合、

https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=http://stackoverflow.com/&key={your_api_key}&screenshot=true&strategy=mobile

デモ

于 2014-03-12T05:36:21.030 に答える
19

PhantomJS のような単純なヘッドレス ブラウザを使用してページを取得できます。

また、PHP で PhantomJS を使用することもできます。

これを行うこの小さなphpスクリプトをチェックしてください。こちらをご覧ください https://github.com/microweber/screen

そしてここにAPIがあります - http://screen.microweber.com/shot.php?url=https://stackoverflow.com/questions/757675/website-screenshots-using-php

于 2013-08-07T07:27:24.977 に答える
4

cutycapt は、Web ページをほとんどの画像形式 (jpg、png など) で保存します。シナプスからダウンロードすると、wkhtmltopdf よりもはるかにうまく機能します。

于 2013-08-19T19:10:11.063 に答える
3

@boksioraによって提案されたように、 microweber/screenを使用して最終的にセットアップしました。ここで言及されたリンク
を最初に試したとき、私が得たもの:

Please download this script from here https://github.com/microweber/screen

私はLinuxを使用しています。したがって、実行したい場合は、私のステップを環境に合わせて調整してください。フォルダー
のシェルで行った手順は次のとおりです。DOCUMENT_ROOT

$ sudo wget https://github.com/microweber/screen/archive/master.zip
$ sudo unzip master.zip
$ sudo mv screen-master screen
$ sudo chmod +x screen/bin/phantomjs
$ sudo yum install fontconfig
$ sudo yum install freetype*
$ cd screen
$ sudo curl -sS https://getcomposer.org/installer | php
$ sudo php composer.phar update
$ cd ..
$ sudo chown -R apache screen
$ sudo chgrp -R www screen
$ sudo service httpd restart

ブラウザで にアクセスしscreen/demo/shot.php?url=google.comます。スクリーンショットが表示されたら完了です。より高度な設定に関する議論は、ここここで利用できます。

于 2016-02-10T18:28:08.817 に答える
2

私はWindowsを使用しているので、stephanからここのヒントを読んだ後、imagegrabwindow関数を使用することができました。トリミング(ブラウザヘッダー、スクロールバーなどを削除するため)とサイズ変更を追加して、最終的な画像を取得しました。これが私のコードです。それが誰かを助けることを願っています。

于 2011-05-13T15:58:55.227 に答える
1

それはすべて、スクリーンショットをどのように撮りたいかによって異なります。

これは、PHPを介して、Webサービスを使用して画像を取得することで実行できます。

grabz.itには、これを行うためのWebサービスがあります。これは、サービスの簡単な使用例を示す記事です。

http://www.phpbuilder.com/articles/news-reviews/miscellaneous/capture-screenshots-in-php-with-grabzit-120524022959.html

于 2012-07-16T10:50:05.283 に答える
1

ブルーガを使用しました。この API を使用すると、料金を支払うことなく月に 100 個のスナップショットを作成できますが、1 つのページに複数のクレジットを使用する場合があります。drupal モジュールBluga WebThumbsの drupal 7 へのアップグレードが完了しました。これにより、テンプレートまたは入力フィルターでサムネイルを印刷できます。

この API を使用する主な利点は、アダプティブ CSS を使用する場合にブラウザーのサイズを指定できることです。そのため、通常のレイアウトだけでなく、モバイルおよびタブレット レイアウトのレンダリングも取得するために使用しています。

次の言語用の API クライアントがあります。

PHPPythonRubyJava.Net C#Perl およびBash (シェル スクリプトには perl が必要なようです)

于 2012-03-18T10:45:03.860 に答える
-1

直接ではありません。Selenium などのソフトウェアにはこのような機能があり、PHP で制御できますが、他の依存関係があります (スクリーンショットを作成するブラウザーを備えたコンピューターで Java ベースのサーバーを実行するなど)。

于 2009-04-16T19:31:22.977 に答える