PHPでWebサイトのスクリーンショットを撮り、それをファイルに保存する方法はありますか?
最後の編集:7年経ってもこの回答にはまだ支持が得られていますが、 これになると思います ははるかに正確です。
もちろんできますが、ページを何かでレンダリングする必要があります。本当にphpだけを使いたいのであれば、 HTMLTOPS をお勧めします。これにより、ページがレンダリングされ、psファイル(ghostscript)に出力されます。 .jpg、.png、.pdfに変換すると、複雑なページでは少し遅くなることがあります(そしてすべてのCSSをサポートしているわけではありません)。
そうでなければ、 wkhtmltopdf を使用して、pdf、jpgなどでHTMLページを出力することができます。ページをレンダリングします。サーバーにもインストールする必要があります。
UPDATEHTML5とJSの新機能により、JavaScriptを使用してページをキャンバスオブジェクトにレンダリングすることもできます。これを行うためのNiceライブラリは次のとおりです。 Html2Canvas および ここでの実装 G +のようなフィードバックを得るために同じ著者による。 domをキャンバスにレンダリングしたら、ajaxを介してサーバーに送信し、それをjpgとして保存できます。
EDIT:あなたはpdfをpngに変換するためにimagemagickツールを使うことができます。 wkhtmltopdfの私のバージョンは画像をサポートしていません。例えば。 convert html.pdf -append html.png
。
EDIT: この小さなシェルスクリプト はphp5を使ったlinuxでの簡単な/しかし実用的な使用例を示します-cliと上記のツール。
EDIT: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を使用した簡単な解決策を見つけました。
ちょうどそれをパラメータscreenshot=true
でapiと呼ぶ必要があります。
https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=https://stackoverflow.com/&key={your_api_key}&screenshot=true
モバイルサイトビューの場合、&strategy=mobile
をparamsで渡します。
https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=http://stackoverflow.com/&key={your_api_key}&screenshot=true&strategy=mobile
デモ 。
あなたはPhantomJSのような単純なヘッドレスブラウザを使ってページをつかむことができます。
また、PhantomJSをPHPと共に使用することもできます。
これを行うこの小さなPHPスクリプトをチェックしてください。こちらをご覧ください https://github.com/microweber/screen
はい。あなたはいくつかのものが必要になります:
* nxの khtmld(aemon) を参照してください。 Windowsの場合は Url2Jpg を参照してくださいが、それはdotNetアプリなので、またチェックする必要があります Url2Bmp
どちらもスクリーンショットを取得するためにWebアプリケーションから利用できるコンソールツールです。
それを提供するWebサービスもあります。例えば this をチェックしてください。
編集する
この リンク は役に立ちます。
それはPythonの中にありますが、ドキュメンテーションとコードを見ていくと、これがどのように行われているかを正確に見ることができます。あなたがpythonを走らせることができるなら、それはあなたのための既成の解決策です:
1つのプラットフォームに対して1つのマシン上で、または他のプラットフォームを実行している仮想マシンを備えた1つのマシン上で、すべてを実行できます。
フリー、オープンソース、ドキュメンテーションへのリンク、ソースコード、その他の情報についてはページの一番下までスクロールしてください。
はい、そうです。 URLの画像だけが必要な場合はこれを試してください
<img src='http://zenithwebtechnologies.com.au/thumbnail.php?url=www.subway.com.au'>
URLを引数として渡すと、詳細についてはこのリンクをチェックして画像を取得することができます http://zenithwebtechnologies.com.au/auto-thumbnail-generation-from-url.html
まあ、PhantomJSは簡単にサーバーに置くことができますし、それをphpに統合できるブラウザです。あなたはWDudesにコードを見つけることができます。画像サイズの指定、キャッシュ、ファイルとしてのダウンロード、img srcなどでの表示など、もっと多くの機能が含まれています。
<img src=”screenshot.php?url=google.com” />
URLパラメータ
幅と高さ:screenshot.php?url = google.com&w = 1000&h = 800
Screenshot.php?url = google.com&w = 1000&h = 800&clipw = 800&cliph = 600
キャッシュを無効にして新しいスクリーンショットをロードします。
screenshot.php?url = google.com&cache = 0
画像をダウンロードするには:screenshot.php?url = google.com&download = true
ここでチュートリアルを見ることができます: APIなしでPHPを使ってウェブサイトのスクリーンショットをキャプチャする
私はいつも マイクロウェーバースクリーン を使ってあらゆるウェブページのスクリーンショットをキャプチャします。ここでは よく書かれたチュートリアル を見つけることができます。これは簡単で、習得するのに3分以上かかりません。
cutycaptはあなたのシナプスからそれをダウンロードして、ほとんどの画像フォーマット(jpg、png ..)にウェブページを保存します、それはwkhtmltopdfよりはるかによく働きます
スクリーンショットを生成できるオープンソースプロジェクトはたくさんあります。例えばPhantomJS、webkit2pngなど
これらのプロジェクトの大きな問題は、それらが古いブラウザ技術に基づいていて、多くのサイト、特にWebフォント、flexbox、svg、およびHTML5およびCSS仕様に他のさまざまな追加を使用するサイトを過去2、3ヶ月でレンダリングする問題があることです。
私はいくつかのサードパーティのサービスを試してみましたが、そのほとんどはPhantomJSに基づいています。つまり、品質の低いスクリーンショットも作成されています。 Webサイトのスクリーンショットを生成するための最良のサードパーティサービスは、 urlbox.io です。有料サービスですが、有料プランにコミットせずにテストするための7日間の無料トライアルがあります。
これはドキュメントへのリンクです 、そして以下は作曲家と共にPHPで動作させるための簡単なステップです。
// 1 . Get the urlbox/screenshots composer package (on command line):
composer require urlbox/screenshots
// 2. Set up the composer package with Urlbox API credentials:
$urlbox = UrlboxRenderer::fromCredentials('API_KEY', 'API_SECRET');
// 3. Set your options (all options such as full page/full height screenshots, retina resolution, viewport dimensions, thumbnail width etc can be set here. See the docs for more.)
$options['url'] = 'example.com';
// 4. Generate the Urlbox url
$urlboxUrl = $urlbox->generateUrl($options);
// $urlboxUrl is now 'https://api.urlbox.io/v1/API_KEY/TOKEN/png?url=example.com'
// 5. Now stick it in an img tag, when the image is loaded in browser, the API call to urlbox will be triggered and a Nice PNG screenshot will be generated!
<img src="$urlboxUrl" />
例えばこれがこのページのフルスクリーンショットです。
@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関数を使うことができました。私は(ブラウザのヘッダー、スクロールバーなどを取り除くために)トリミングし、最終的な画像を得るためにリサイズすることを加えました。これが私のコードです。誰かに役立つことを願っています。
webkit2htmlはMac OS XとLinuxで動作します。インストールと使用はとても簡単です。このチュートリアルを参照してください。
Windowsの場合は、 CutyCapt を使用して同様の機能を実行できます。
たくさんの選択肢があり、それらはすべて彼らの賛否両論があります。これは実装の難易度順に並べられたオプションのリストです。
長所
短所
長所
短所
長所
短所
長所
短所
免責事項:私はApiFlashの創設者です。私は正直で有用な答えを提供するために最善を尽くしました。
それはすべてあなたがスクリーンショットを撮る方法によって異なります。
あなたはあなたのために画像を取得するためにWebサービスを使用して、PHP経由でこれを行うことができます
grabz.itにはこれを行うためのWebサービスがあります。これは、サービスを使用する簡単な例を示す記事です。
あなたは https://grabz.it 解決策を使うことができます。
非常に柔軟で、cronjobやPHP Webページなど、さまざまな方法で呼び出すことができるPHP APIがあります。
それを実装するためには、最初に アプリキーとシークレット と をダウンロードする必要があります (無料の)SDK.
そして実装の例です。すべての初期化の最初に:
include("GrabzItClient.class.php");
// Create the GrabzItClient class
// Replace "APPLICATION KEY", "APPLICATION SECRET" with the values from your account!
$grabzIt = new GrabzItClient("Sign in to view your Application Key", "Sign in to view your Application Secret");
スクリーンショットの例:
// To take a image screenshot
$grabzIt->URLToImage("http://www.google.com");
// Or to take a PDF screenshot
$grabzIt->URLToPDF("http://www.google.com");
// Or to convert online videos into animated GIF's
$grabzIt->URLToAnimation("http://www.example.com/video.avi");
// Or to capture table(s)
$grabzIt->URLToTable("http://www.google.com");
次に、保存方法を示します。2つの保存方法のうち、パブリックアクセス可能なコールバックハンドルがある場合はSave
を、使用できない場合はSaveTo
を使用できます。 詳細についてはドキュメントをチェックしてください 。
私は bluga を使った。 apiを使用すると、1か月に100枚のスナップショットを支払うことなく撮影できますが、1ページに複数のクレジットが使用されることもあります。私はdrupalモジュールをアップグレードし終えたところです。 Bluga WebThumbs をdrupal 7にアップグレードすると、テンプレートや入力フィルタでサムネイルを印刷することができます。
このAPIを使用する主な利点は、アダプティブCSSを使用する場合にブラウザの寸法を指定できることです。そのため、通常のレイアウトと同様にモバイルおよびタブレットのレイアウトのレンダリングにも使用しています。
以下の言語用のapiクライアントがあります。
PHP 、 Python 、 Ruby 、 Java 、 。ネットC# 、 Perl 、および Bash (シェルスクリプトは次のようになります) Perlが必要です。
私は先日、Google APIを使ってこれを行うための迅速で汚れたアプリを書きました。最も確実に改善の余地があります...
ここで ライブデモとコード でそれを見つけてください。
私はここでコードを投稿しませんでした。それは単に洗練を続け、時間があれば適切なクラスに変換することを願います。
ウェブ上でサーフィンをした後、私はこれを見つけました。
PPTRAAS > URLをパラメータとして渡してスクリーンショットをキャプチャするための無料ツール
彼らは単に彼らのURLを押すことで複数のオプションを提供します。
ページ全体のスクリーンショットを取得する
https://pptraas.com/screenshot?url= {あなたのURLはこちら}
特定サイズのページスクリーンショットを取得する
https://pptraas.com/screenshot?url= {あなたのURLはこちら}&size = 400,400
ページをpdfに変換することさえできます
https://pptraas.com/pdf?url= {あなたのURLはこちら}
私は page2images を使いました。それは本当に速くて安定しているcutycaptに基づいて開発されています。パフォーマンスと設定にあまり時間をかけたくない場合は、それを使用する必要があります。あなたが彼らのウェブサイトに行くならば、あなたはより多くの詳細とサンプルPHPコードを見つけることができます。