Apakah ada cara untuk mengambil tangkapan layar situs web dalam PHP, lalu menyimpannya ke file?
Apakah ada cara untuk mengambil tangkapan layar situs web dalam PHP, lalu menyimpannya ke file?
Jawaban:
EDIT TERAKHIR : setelah 7 tahun saya masih mendapatkan upvotes untuk jawaban ini, tapi saya kira yang ini sekarang jauh lebih akurat.
Tentu Anda bisa, tetapi Anda harus membuat halaman dengan sesuatu. Jika Anda benar-benar hanya ingin menggunakan php, saya sarankan Anda HTMLTOPS , yang merender halaman dan menampilkannya dalam file ps (ghostscript), kemudian, konversikan ke dalam .jpg, .png, .pdf .. bisa menjadi sedikit lebih lambat dengan halaman kompleks (dan tidak mendukung semua CSS).
Selain itu, Anda dapat menggunakan wkhtmltopdf untuk menghasilkan halaman html di pdf, jpg, apa pun .. Terima CSS2.0, gunakan webkit (pembungkus safari) untuk membuat halaman .. jadi harus baik-baik saja. Anda harus menginstalnya di server Anda, juga ..
PEMBARUAN Sekarang, dengan fitur HTML5 dan JS baru, juga memungkinkan untuk merender halaman menjadi objek kanvas menggunakan JavaScript. Berikut pustaka yang bagus untuk melakukannya: Html2Canvas dan di sini adalah implementasi oleh penulis yang sama untuk mendapatkan umpan balik seperti G +. Setelah Anda merender dom ke kanvas, Anda dapat mengirim ke server melalui ajax dan menyimpannya sebagai jpg.
EDIT : Anda dapat menggunakan alat imagemagick untuk mengubah pdf ke png. Versi wkhtmltopdf saya tidak mendukung gambar. Misalnya convert html.pdf -append html.png
.
EDIT : Script shell kecil ini memberikan contoh penggunaan sederhana / tetapi berfungsi di linux dengan php5-cli dan alat-alat yang disebutkan di atas.
EDIT : saya perhatikan sekarang bahwa tim wkhtmltopdf sedang mengerjakan proyek lain: wkhtmltoimage, yang memberi Anda jpg secara langsung
Karena PHP 5.2.2 dimungkinkan, untuk menangkap situs web dengan PHP semata-mata !
imagegrabscreen - Menangkap seluruh layar
<?php
$img = imagegrabscreen();
imagepng($img, 'screenshot.png');
?>
imagegrabwindow - Ambil jendela atau area kliennya menggunakan pegangan jendela (properti HWND dalam contoh COM)
<?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');
?>
Sunting: Catatan, fungsi-fungsi ini HANYA tersedia pada sistem Windows!
Jika Anda tidak ingin menggunakan alat pihak ketiga, saya telah menemukan solusi sederhana yang menggunakan api Google Page Insight .
Hanya perlu menyebutnya api dengan params screenshot=true
.
https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=https://stackoverflow.com/&key={your_api_key}&screenshot=true
Untuk parade tampilan situs seluler &strategy=mobile
,
https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=http://stackoverflow.com/&key={your_api_key}&screenshot=true&strategy=mobile
DEMO .
Anda dapat menggunakan browser tanpa kepala sederhana seperti PhantomJS untuk mengambil halaman.
Anda juga dapat menggunakan PhantomJS dengan PHP.
Lihatlah skrip php kecil ini yang melakukan ini. Lihatlah di sini https://github.com/microweber/screen
Dan di sini adalah API- http://screen.microweber.com/shot.php?url=/programming/757675/website-screenshots-using-php
Ini seharusnya baik untuk Anda:
Pastikan Anda mengunduh distribusi wkhtmltoimage!
Iya. Anda akan memerlukan beberapa hal:
Lihat khtmld (aemon) di * nx. Lihat Url2Jpg untuk Windows tetapi karena ini adalah aplikasi dotNet Anda juga harus chek Url2Bmp
Keduanya adalah alat konsol yang dapat Anda manfaatkan dari aplikasi web Anda untuk mendapatkan tangkapan layar.
Ada juga layanan web yang menawarkannya. Lihat ini sebagai contoh.
Edit:
Ini link yang berguna untuk.
Ini menggunakan Python, tetapi mempelajari dokumentasi dan kode Anda dapat melihat persis bagaimana ini dilakukan. Jika Anda dapat menjalankan python, maka itu solusi siap pakai untuk Anda:
Perhatikan bahwa semuanya dapat berjalan pada satu mesin untuk satu platform, atau satu mesin dengan mesin virtual yang menjalankan platform lainnya.
Gratis, sumber terbuka, gulir ke bawah halaman untuk tautan ke dokumentasi, kode sumber, dan informasi lainnya.
Ya itu. Jika Anda hanya perlu gambar URL coba ini
<img src='http://zenithwebtechnologies.com.au/thumbnail.php?url=www.subway.com.au'>
Lewati url sebagai argumen dan Anda akan mendapatkan gambar untuk lebih jelasnya periksa tautan ini http://zenithwebtechnologies.com.au/auto-thumbnail-generation-from-url.html
Nah, PhantomJS adalah browser yang bisa dengan mudah diletakkan di server dan mengintegrasikannya ke php. Anda dapat menemukan kode di WDudes. Mereka telah memasukkan lebih banyak fitur seperti menentukan ukuran gambar, cache, unduh sebagai file atau tampilan di img src dll.
<img src=”screenshot.php?url=google.com” />
Parameter URL
Lebar dan Tinggi: tangkapan layar.php? Url = google.com & w = 1000 & h = 800
Dengan memotong: tangkapan layar.php? Url = google.com & w = 1000 & h = 800 & clipw = 800 & cliph = 600
Nonaktifkan cache dan muat screesnhot segar:
tangkapan layar.php ? Url = google.com & cache = 0
Untuk mengunduh gambar: tangkapan layar.php? Url = google.com & unduh = true
Anda dapat melihat tutorialnya di sini: Tangkap Cuplikan Layar Situs Web menggunakan PHP tanpa API
Saya selalu menggunakan layar microweber untuk menangkap tangkapan layar halaman web apa pun. Di sini kita dapat menemukan tutorial yang ditulis dengan baik . Ini lebih mudah dan tidak perlu lebih dari 3 menit untuk belajar.
Saya mengatur akhirnya menggunakan microweber / layar seperti yang diusulkan oleh @boksiora.
Awalnya ketika mencoba tautan yang disebutkan di sini, apa yang saya dapatkan:
Please download this script from here https://github.com/microweber/screen
Saya di Linux. Jadi jika Anda ingin menjalankannya, Anda dapat menyesuaikan langkah saya mengikuti lingkungan Anda.
Berikut langkah yang saya lakukan pada shell di DOCUMENT_ROOT
folder:
$ 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
Arahkan browser Anda ke screen/demo/shot.php?url=google.com
. Ketika Anda melihat tangkapan layar , Anda selesai. Diskusi untuk pengaturan lebih lanjut tersedia di sini dan di sini .
Ada banyak proyek open source yang dapat menghasilkan tangkapan layar. Misalnya PhantomJS, webkit2png dll
Masalah besar dengan proyek-proyek ini adalah bahwa mereka didasarkan pada teknologi browser yang lebih tua dan memiliki masalah dalam merender banyak situs, terutama situs yang menggunakan webfonts, flexbox, svg dan berbagai tambahan lainnya pada spesifikasi HTML5 dan CSS selama beberapa bulan / tahun terakhir.
Saya sudah mencoba beberapa layanan pihak ketiga, dan sebagian besar didasarkan pada PhantomJS, yang berarti mereka juga menghasilkan tangkapan layar berkualitas buruk. Layanan pihak ketiga terbaik untuk menghasilkan tangkapan layar situs web adalah urlbox.io . Ini adalah layanan berbayar, meskipun ada uji coba 7 hari gratis untuk mengujinya tanpa melakukan rencana pembayaran.
Berikut ini tautan ke dokumentasi , dan di bawah ini adalah langkah-langkah sederhana untuk membuatnya bekerja dalam PHP dengan komposer.
// 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" />
Untuk misalnya, inilah tangkapan layar ketinggian penuh dari halaman ini:
Ada banyak pilihan dan mereka semua memiliki pro dan kontra. Berikut adalah daftar opsi yang dipesan oleh kesulitan implementasi.
Pro
Cons
Pro
Cons
Pro
Cons
Pro
Cons
Penafian: Saya adalah pendiri ApiFlash. Saya melakukan yang terbaik untuk memberikan jawaban yang jujur dan bermanfaat.
Saya menggunakan Windows sehingga saya dapat menggunakan fungsi imagegrabwindow setelah membaca tip di sini dari stephan. Saya menambahkan dalam pemotongan (untuk menghilangkan header Browser, scroll bar, dll.) Dan mengubah ukuran untuk mendapatkan gambar akhir. Ini kode saya . Semoga itu bisa membantu seseorang.
webkit2html berfungsi pada Mac OS X dan Linux, cukup mudah untuk diinstal dan digunakan. Lihat tutorial ini .
Untuk Windows, Anda dapat menggunakan CutyCapt , yang memiliki fungsi serupa.
Saya menggunakan bluga . Api memungkinkan Anda mengambil 100 foto sebulan tanpa membayar, tetapi kadang-kadang menggunakan lebih dari 1 kredit untuk satu halaman. Saya baru saja selesai memutakhirkan modul drupal, Bluga WebThumbs ke drupal 7 yang memungkinkan Anda mencetak thumbnail dalam template atau input filter.
Keuntungan utama menggunakan api ini adalah memungkinkan Anda untuk menentukan dimensi peramban jika Anda menggunakan css adaptif, jadi saya menggunakannya untuk mendapatkan rendering untuk tata letak ponsel dan tablet serta yang biasa.
Ada api klien untuk bahasa-bahasa berikut:
PHP , Python , Ruby , Java , .Net C # , Perl dan Bash (skrip shell sepertinya membutuhkan perl)
Itu semua tergantung pada bagaimana Anda ingin mengambil tangkapan layar.
Anda bisa melakukan ini melalui PHP, menggunakan layanan web untuk mendapatkan gambar untuk Anda
grabz.it memiliki layanan web untuk melakukan hal ini, inilah artikel yang menunjukkan contoh sederhana menggunakan layanan ini.
Anda dapat menggunakan solusi https://grabz.it .
Itu punya PHP API yang sangat fleksibel dan dapat dipanggil dengan berbagai cara seperti dari cronjob atau halaman web PHP.
Untuk menerapkannya, Anda harus terlebih dahulu mendapatkan kunci aplikasi dan rahasia serta mengunduh (gratis) SDK.
Dan contoh untuk implementasi. Pertama-tama inisialisasi:
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");
Dan contoh tangkapan layar:
// 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");
Berikutnya adalah penghematan. Anda dapat menggunakan salah satu dari dua metode penyimpanan, Save
jika panggilan balik yang dapat diakses publik tersedia dan SaveTo
jika tidak. Periksa dokumentasi untuk detailnya .
Saya menulis aplikasi cepat dan kotor tempo hari untuk melakukan ini menggunakan Google API. Tentunya ruang lingkup untuk peningkatan ...
Temukan di sini dengan demo dan kode langsung .
Saya tidak memposting kode di sini hanya karena saya terus memperbaikinya dan mudah-mudahan ketika saya punya waktu, mengubahnya menjadi kelas yang tepat.
Saya menggunakan page2images . Ini dikembangkan berdasarkan cutycapt yang sangat cepat dan stabil. Jika Anda tidak ingin menghabiskan terlalu banyak waktu untuk kinerja dan konfigurasi, Anda harus menggunakannya. Jika Anda mengunjungi situs web mereka, Anda dapat menemukan lebih banyak detail dan contoh kode PHP.
Setelah banyak berselancar di web saya menemukan ini.
PPTRAAS > Alat gratis untuk menangkap tangkapan layar dengan mengirimkan URL Anda sebagai parameter
Mereka menyediakan banyak opsi hanya dengan menekan URL mereka.
Dapatkan tangkapan layar satu halaman penuh
https://pptraas.com/screenshot?url= {URL ANDA DI SINI}
Dapatkan tangkapan layar halaman dengan ukuran tertentu
https://pptraas.com/screenshot?url= {URL ANDA DI SINI} & size = 400.400
Satu bahkan dapat mengkonversi halaman ke pdf
https://pptraas.com/pdf?url= {URL ANDA DI SINI}
Anda bisa melakukan 2 hal.
Gunakan Dalang
Anda dapat menggunakan paket PHP Puppeteer untuk memutar browser dan mengambil tangkapan layar.
Gunakan API
Ada banyak tangkapan layar API. Anda dapat melihat ScreenshotAPI.net misalnya. (Penafian saya pencipta API itu)
Tidak secara langsung. Perangkat lunak seperti Selenium memiliki fitur seperti ini dan dapat dikontrol oleh PHP tetapi memiliki dependencys lainnya (seperti menjalankan server berbasis java di komputer dengan browser yang ingin Anda tangkapan layar)
Anda dapat menggunakan cutycapt.
kwhtml sudah usang dan menampilkan halaman seperti browser lama.
Saya menemukan ini sebagai alat terbaik dan termudah: ScreenShotMachine . Ini adalah layanan berbayar, tetapi Anda mendapatkan 100 tangkapan layar gratis dan Anda dapat membeli 2.000 lainnya seharga (sekitar) $ 20, jadi ini adalah kesepakatan yang cukup bagus. Ini memiliki penggunaan yang sangat sederhana, Anda hanya menggunakan URL, jadi saya menulis skrip kecil ini untuk menyimpan file berdasarkan itu:
<?php
$url = file_get_contents("http://api.screenshotmachine.com/?key={mykey}&url=https://stackoverflow.com&size=X");
$file = fopen("snapshots/stack.jpg", "w+");
fwrite($file, $url);
fclose($file);
die("saved file!");
?>
Mereka memiliki dokumentasi yang sangat bagus di sini , jadi Anda harus melihatnya.