web-dev-qa-db-ja.com

ウェブサイトのスクリーンショット

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

398
Tom

最後の編集: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を与えます

270
Strae

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システムでのみ利用可能です。

87
stephan

サードパーティ製のツールを使用したくない場合は、 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

デモ

53
Rikesh

あなたはPhantomJSのような単純なヘッドレスブラウザを使ってページをつかむことができます。

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

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

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

19
boksiora

これはあなたにとって良いことであるべきです:

https://wkhtmltopdf.org/

必ずwkhtmltoimageディストリビューションをダウンロードしてください。

17
Christian

はい。あなたはいくつかのものが必要になります:

* nxの khtmld(aemon) を参照してください。 Windowsの場合は Url2Jpg を参照してくださいが、それはdotNetアプリなので、またチェックする必要があります Url2Bmp

どちらもスクリーンショットを取得するためにWebアプリケーションから利用できるコンソールツールです。

それを提供するWebサービスもあります。例えば this をチェックしてください。

編集する

この リンク は役に立ちます。

10
majkinetor

それはPythonの中にありますが、ドキュメンテーションとコードを見ていくと、これがどのように行われているかを正確に見ることができます。あなたがpythonを走らせることができるなら、それはあなたのための既成の解決策です:

http://browsershots.org/

1つのプラットフォームに対して1つのマシン上で、または他のプラットフォームを実行している仮想マシンを備えた1つのマシン上で、すべてを実行できます。

フリー、オープンソース、ドキュメンテーションへのリンク、ソースコード、その他の情報についてはページの一番下までスクロールしてください。

10
Adam Davis

はい、そうです。 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

5
Mee

まあ、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を使ってウェブサイトのスクリーンショットをキャプチャする

4
Gijo Varghese

私はいつも マイクロウェーバースクリーン を使ってあらゆるウェブページのスクリーンショットをキャプチャします。ここでは よく書かれたチュートリアル を見つけることができます。これは簡単で、習得するのに3分以上かかりません。

4
Rinku

cutycaptはあなたのシナプスからそれをダウンロードして、ほとんどの画像フォーマット(jpg、png ..)にウェブページを保存します、それはwkhtmltopdfよりはるかによく働きます

4
wolfgang

スクリーンショットを生成できるオープンソースプロジェクトはたくさんあります。例えば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" />

例えばこれがこのページのフルスクリーンショットです。

https://api.urlbox.io/v1/ca482d7e-9417-4569-90fe-80f7c5e1c781/8f1666d1f4195b1cb84ffa5f992ee18992a2b35e/png?url=http%3%2752F2F2F2F2F2F2F2F2F2F2F2F2F2F2FW2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2Fについて%2Fwebsite-screenshots-using-php%2F43652083%2343652083&full_page = true

full page screenshot of stackoverflow.com question powered by urlbox.io

3
cjroebuck

@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にアクセスしてください。 スクリーンショット が表示されたら、完了です。より高度な設定についての議論はここにあります ここで そして ここ

3
Chetabahana

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

2

webkit2htmlはMac OS XとLinuxで動作します。インストールと使用はとても簡単です。このチュートリアルを参照してください。

Windowsの場合は、 CutyCapt を使用して同様の機能を実行できます。

1
Piskvor

たくさんの選択肢があり、それらはすべて彼らの賛否両論があります。これは実装の難易度順に並べられたオプションのリストです。

オプション1:APIを使用する(最も簡単な方法)

長所

  • Javascriptを実行する
  • ほぼ完璧なレンダリング
  • キャッシュオプションが正しく使用されている場合は高速
  • スケールはAPIによって処理されます
  • 正確なタイミング、ビューポート、...
  • ほとんどの場合、彼らは無料のプランを提供しています

短所

  • たくさん使うつもりなら無料ではない

オプション2:多くの利用可能なライブラリのうちの1つを使う

長所

  • ほとんどの場合、変換は非常に高速です。

短所

  • 悪いレンダリング
  • Javascriptを実行しません
  • 最近のWeb機能はサポートされていません(FlexBox、アドバンストセレクタ、Webフォント、ボックスサイズ、Media Queries、HTML5タグなど)。
  • 時にはそれほど簡単ではない
  • 縮尺が複雑

オプション3:PhantomJとおそらくラッパーライブラリを使う

長所

  • Javascriptを実行する
  • かなり速いです

短所

  • 悪いレンダリング
  • PhantomJは廃止予定で、もう保守されていません。
  • 最近のWeb機能はサポートされていません(FlexBox、アドバンストセレクタ、Webフォント、ボックスサイズ、Media Queries、HTML5タグなど)。
  • 縮尺が複雑
  • ロードする画像がある場合、それを機能させるのはそれほど簡単ではありません。

オプション4:Chrome Headlessとおそらくラッパーライブラリを使う

長所

  • Javascriptを実行する
  • ほぼ完璧なレンダリング

短所

  • 以下について正確に望ましい結果を得ることはそれほど簡単ではありません。
    • ページ読み込みタイミング
    • プロキシ統合
    • 自動スクロール
    • ...
  • 縮尺が複雑
  • HTMLに外部リンクが含まれている場合、かなり遅くなり、さらに遅くなります。

免責事項:私はApiFlashの創設者です。私は正直で有用な答えを提供するために最善を尽くしました。

1

それはすべてあなたがスクリーンショットを撮る方法によって異なります。

あなたはあなたのために画像を取得するためにWebサービスを使用して、PHP経由でこれを行うことができます

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

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

1
Andrew

あなたは https://grabz.it 解決策を使うことができます。

非常に柔軟で、cronjobやPHP Webページなど、さまざまな方法で呼び出すことができるPHP AP​​Iがあります。

それを実装するためには、最初に アプリキーとシークレットをダウンロードする必要があります (無料の)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を使用できます。 詳細についてはドキュメントをチェックしてください

1
Stas

私は bluga を使った。 apiを使用すると、1か月に100枚のスナップショットを支払うことなく撮影できますが、1ページに複数のクレジットが使用されることもあります。私はdrupalモジュールをアップグレードし終えたところです。 Bluga WebThumbs をdrupal 7にアップグレードすると、テンプレートや入力フィルタでサムネイルを印刷することができます。

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

以下の言語用のapiクライアントがあります。

PHPPythonRubyJava。ネットC#Perl 、および Bash (シェルスクリプトは次のようになります) Perlが必要です。

1
Arosboro

私は先日、Google APIを使ってこれを行うための迅速で汚れたアプリを書きました。最も確実に改善の余地があります...

  • 最新のGoogle API ver 5を使用しています。
  • 現在の画像サイズは500ピクセル幅
  • デスクトップとモバイルビューをサポート
  • 指定したフォルダ内のファイルに保存する
  • 初歩的なキャッシュシステムを組み込む

ここで ライブデモとコード でそれを見つけてください。

私はここでコードを投稿しませんでした。それは単に洗練を続け、時間があれば適切なクラスに変換することを願います。

0
Fred

ウェブ上でサーフィンをした後、私はこれを見つけました。

PPTRAAS > URLをパラメータとして渡してスクリーンショットをキャプチャするための無料ツール

彼らは単に彼らのURLを押すことで複数のオプションを提供します。

  1. ページ全体のスクリーンショットを取得する

    https://pptraas.com/screenshot?url= {あなたのURLはこちら}

  2. 特定サイズのページスクリーンショットを取得する

    https://pptraas.com/screenshot?url= {あなたのURLはこちら}&size = 400,400

  3. ページをpdfに変換することさえできます

    https://pptraas.com/pdf?url= {あなたのURLはこちら}

0
Fenil Shah

私は page2images を使いました。それは本当に速くて安定しているcutycaptに基づいて開発されています。パフォーマンスと設定にあまり時間をかけたくない場合は、それを使用する必要があります。あなたが彼らのウェブサイトに行くならば、あなたはより多くの詳細とサンプルPHPコードを見つけることができます。

0
Chen