PHP で Web サイトのスクリーンショットを撮り、それをファイルに保存する方法はありますか?
18 に答える
最終編集: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を直接提供します
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 システムでのみ使用できます。
サードパーティのツールを使用したくない場合は、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
デモ。
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
cutycapt は、Web ページをほとんどの画像形式 (jpg、png など) で保存します。シナプスからダウンロードすると、wkhtmltopdf よりもはるかにうまく機能します。
@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
ます。スクリーンショットが表示されたら完了です。より高度な設定に関する議論は、こことここで利用できます。
私はWindowsを使用しているので、stephanからここのヒントを読んだ後、imagegrabwindow関数を使用することができました。トリミング(ブラウザヘッダー、スクロールバーなどを削除するため)とサイズ変更を追加して、最終的な画像を取得しました。これが私のコードです。それが誰かを助けることを願っています。
それはすべて、スクリーンショットをどのように撮りたいかによって異なります。
これは、PHPを介して、Webサービスを使用して画像を取得することで実行できます。
grabz.itには、これを行うためのWebサービスがあります。これは、サービスの簡単な使用例を示す記事です。
ブルーガを使用しました。この API を使用すると、料金を支払うことなく月に 100 個のスナップショットを作成できますが、1 つのページに複数のクレジットを使用する場合があります。drupal モジュールBluga WebThumbsの drupal 7 へのアップグレードが完了しました。これにより、テンプレートまたは入力フィルターでサムネイルを印刷できます。
この API を使用する主な利点は、アダプティブ CSS を使用する場合にブラウザーのサイズを指定できることです。そのため、通常のレイアウトだけでなく、モバイルおよびタブレット レイアウトのレンダリングも取得するために使用しています。
次の言語用の API クライアントがあります。
PHP、 Python、 Ruby、 Java、 .Net C#、 Perl およびBash (シェル スクリプトには perl が必要なようです)
直接ではありません。Selenium などのソフトウェアにはこのような機能があり、PHP で制御できますが、他の依存関係があります (スクリーンショットを作成するブラウザーを備えたコンピューターで Java ベースのサーバーを実行するなど)。