Có cách nào để chụp ảnh màn hình của một trang web trong PHP, sau đó lưu nó vào một tệp không?
Có cách nào để chụp ảnh màn hình của một trang web trong PHP, sau đó lưu nó vào một tệp không?
Câu trả lời:
CHỈNH SỬA CUỐI : sau 7 năm tôi vẫn nhận được sự ủng hộ cho câu trả lời này, nhưng tôi đoán câu này bây giờ chính xác hơn nhiều.
Chắc chắn bạn có thể, nhưng bạn sẽ cần kết xuất trang bằng một cái gì đó. Nếu bạn thực sự chỉ muốn sử dụng php, tôi khuyên bạn nên HTMLTOPS , nó kết xuất trang và xuất ra nó trong tệp ps (ghostscript), sau đó, chuyển đổi nó thành .jpg, .png, .pdf .. có thể chậm hơn một chút với các trang phức tạp (và không hỗ trợ tất cả CSS).
Khác, bạn có thể sử dụng wkhtmltopdf để xuất trang html dưới dạng pdf, jpg, bất cứ điều gì .. Chấp nhận CSS2.0, sử dụng bộ webkit (trình bao bọc của safari) để hiển thị trang .. vì vậy sẽ ổn. Bạn cũng phải cài đặt nó trên máy chủ của mình ..
CẬP NHẬT Bây giờ, với tính năng HTML5 và JS mới, cũng có thể hiển thị trang thành một đối tượng canvas bằng JavaScript. Đây là một thư viện đẹp để làm điều đó: Html2Canvas và đây là một triển khai của cùng một tác giả để có được phản hồi như G +. Khi bạn đã kết xuất dom vào canvas, sau đó bạn có thể gửi đến máy chủ thông qua ajax và lưu nó dưới dạng jpg.
EDIT : Bạn có thể sử dụng công cụ fantemagick để chuyển đổi pdf sang png. Phiên bản wkhtmltopdf của tôi không hỗ trợ hình ảnh. Ví dụ convert html.pdf -append html.png
.
EDIT : Kịch bản shell nhỏ này đưa ra một ví dụ sử dụng đơn giản / nhưng hoạt động trên linux với php5-cli và các công cụ được đề cập ở trên.
EDIT : tôi nhận thấy rằng nhóm wkhtmltopdf đang làm việc trên một dự án khác: wkhtmltoimage, cung cấp cho bạn jpg trực tiếp
Vì PHP 5.2.2 là có thể, để chỉ chụp một trang web với PHP !
imagegrabscreen - Chụp toàn bộ màn hình
<?php
$img = imagegrabscreen();
imagepng($img, 'screenshot.png');
?>
imagegrabwindow - Lấy một cửa sổ hoặc khu vực khách hàng của nó bằng cách sử dụng tay cầm cửa sổ (thuộc tính HWND trong ví dụ 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');
?>
Chỉnh sửa: Lưu ý, các chức năng này chỉ khả dụng trên các hệ thống Windows!
Nếu bạn không muốn sử dụng bất kỳ công cụ của bên thứ ba nào, tôi đã tìm đến giải pháp đơn giản đó là sử dụng Google Page Insight api.
Chỉ cần gọi nó là api với params screenshot=true
.
https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=https://stackoverflow.com/&key={your_api_key}&screenshot=true
Đối với lượt xem trang web di động &strategy=mobile
trong params,
https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=http://stackoverflow.com/&key={your_api_key}&screenshot=true&strategy=mobile
DEMO .
Bạn có thể sử dụng trình duyệt không đầu đơn giản như PhantomJS để lấy trang.
Ngoài ra, bạn có thể sử dụng PhantomJS với PHP.
Kiểm tra tập lệnh php nhỏ này làm điều này. Hãy xem tại đây https://github.com/microweber/screen
Và đây là API- http://screen.microweber.com/shot.php?url=/programming/757675/website-scshotsshots-USE-php
Điều này nên tốt cho bạn:
Hãy chắc chắn rằng bạn tải xuống bản phân phối wkhtmltoimage!
Đúng. Bạn sẽ cần một số thứ tho:
Xem khtmld (aemon) trên * nx. Xem Url2Jpg cho Windows nhưng vì đây là ứng dụng dotNet nên bạn cũng nên sử dụng Url2Bmp
Cả hai đều là công cụ điều khiển mà bạn có thể sử dụng từ ứng dụng web của mình để có được ảnh chụp màn hình.
Ngoài ra còn có các dịch vụ web cung cấp nó. Kiểm tra này ra ví dụ.
Biên tập:
Đây link rất hữu ích để.
Đó là trong Python, nhưng xem qua tài liệu và mã bạn có thể thấy chính xác cách thực hiện. Nếu bạn có thể chạy python, thì đó là một giải pháp sẵn sàng cho bạn:
Lưu ý rằng mọi thứ có thể chạy trên một máy cho một nền tảng hoặc một máy có máy ảo chạy các nền tảng khác.
Miễn phí, mã nguồn mở, cuộn xuống cuối trang để liên kết đến tài liệu, mã nguồn và thông tin khác.
Vâng, đúng vậy. Nếu bạn chỉ cần hình ảnh của URL hãy thử điều này
<img src='http://zenithwebtechnologies.com.au/thumbnail.php?url=www.subway.com.au'>
Truyền url làm đối số và bạn sẽ nhận được hình ảnh để biết thêm chi tiết kiểm tra liên kết này http://zenithwebtechnologists.com.au/auto-thumbnail-generation-from-url.html
Chà, PhantomJS là một trình duyệt có thể dễ dàng đặt trên máy chủ và tích hợp nó vào php. Bạn có thể tìm thấy mã trong WDudes. Chúng đã bao gồm nhiều tính năng hơn như chỉ định kích thước hình ảnh, bộ đệm, tải xuống dưới dạng tệp hoặc hiển thị trong img src, v.v.
<img src=”screenshot.php?url=google.com” />
Tham số URL
Chiều rộng và chiều cao: ảnh chụp màn hình.php? Url = google.com & w = 1000 & h = 800
Với cắt xén: ảnh chụp màn hình.php? Url = google.com & w = 1000 & h = 800 & clipw = 800 & cliph = 600
Vô hiệu hóa bộ đệm và tải screesnhot mới:
ảnh chụp màn hình.php ? Url = google.com & cache = 0
Để tải xuống hình ảnh: ảnh chụp màn hình.php? Url = google.com & download = true
Bạn có thể xem hướng dẫn tại đây: Chụp ảnh chụp màn hình của một trang web bằng PHP mà không cần API
Tôi luôn sử dụng màn hình microweber để chụp ảnh màn hình của bất kỳ trang web nào. Ở đây chúng ta có thể tìm thấy một hướng dẫn bằng văn bản . Điều này dễ dàng hơn và không nên mất hơn 3 phút để học.
Cuối cùng tôi đã thiết lập bằng microweber / màn hình theo đề xuất của @boksiora.
Ban đầu khi thử liên kết được đề cập ở đây những gì tôi nhận được:
Please download this script from here https://github.com/microweber/screen
Tôi đang dùng Linux. Vì vậy, nếu bạn muốn chạy nó, bạn có thể điều chỉnh bước của tôi theo môi trường của bạn.
Đây là bước tôi đã làm trên shell của mình trên DOCUMENT_ROOT
thư mục:
$ 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
Trỏ trình duyệt của bạn tới screen/demo/shot.php?url=google.com
. Khi bạn nhìn thấy ảnh chụp màn hình , bạn đã hoàn tất. Thảo luận cho các thiết lập trước có sẵn ở đây và ở đây .
Có nhiều dự án nguồn mở có thể tạo ảnh chụp màn hình. Ví dụ: PhantomJS, webkit2png, v.v.
Vấn đề lớn với các dự án này là chúng dựa trên công nghệ trình duyệt cũ hơn và có vấn đề khi kết xuất nhiều trang web, đặc biệt là các trang web sử dụng webfont, flexbox, svg và nhiều bổ sung khác cho thông số HTML5 và CSS trong vài tháng qua / năm.
Tôi đã thử một vài dịch vụ của bên thứ ba và hầu hết đều dựa trên PhantomJS, nghĩa là chúng cũng tạo ra các ảnh chụp màn hình kém chất lượng. Dịch vụ bên thứ ba tốt nhất để tạo ảnh chụp màn hình trang web là urlbox.io . Đây là một dịch vụ trả phí, mặc dù có bản dùng thử 7 ngày miễn phí để thử nghiệm mà không cam kết với bất kỳ gói trả phí nào.
Đây là một liên kết đến tài liệu và dưới đây là các bước đơn giản để làm cho nó hoạt động trong PHP với trình soạn thảo.
// 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" />
Ví dụ: đây là một ảnh chụp màn hình chiều cao đầy đủ của chính trang này:
https://api.urlbox.io/v1/ca482d7e-9417-4569-90fe-80 2F43652083% 2343652083 & full_page = đúng
Có rất nhiều lựa chọn và tất cả đều có ưu và nhược điểm của chúng. Dưới đây là danh sách các tùy chọn được sắp xếp theo độ khó thực hiện.
Ưu
Nhược điểm
Ưu
Nhược điểm
Ưu
Nhược điểm
Ưu
Nhược điểm
Tuyên bố miễn trừ trách nhiệm: Tôi là người sáng lập ApiFlash. Tôi đã làm hết sức mình để cung cấp một câu trả lời trung thực và hữu ích.
Tôi đang sử dụng Windows nên tôi có thể sử dụng chức năng imagegrabwindow sau khi đọc mẹo ở đây từ stephan. Tôi đã thêm vào cắt xén (để loại bỏ tiêu đề Trình duyệt, thanh cuộn, v.v.) và thay đổi kích thước để có được hình ảnh cuối cùng. Đây là mã của tôi . Hy vọng rằng sẽ giúp được ai đó.
webkit2html hoạt động trên Mac OS X và Linux, khá đơn giản để cài đặt và sử dụng. Xem hướng dẫn này .
Đối với Windows, bạn có thể sử dụng CutyCapt , có chức năng tương tự.
Tôi đã sử dụng bluga . Api cho phép bạn chụp 100 ảnh chụp mỗi tháng mà không phải trả tiền, nhưng đôi khi nó sử dụng nhiều hơn 1 tín dụng cho một trang. Tôi vừa hoàn thành nâng cấp một mô-đun drupal, Bluga WebThumbs lên drupal 7 cho phép bạn in hình thu nhỏ trong một mẫu hoặc bộ lọc đầu vào.
Ưu điểm chính của việc sử dụng api này là nó cho phép bạn chỉ định kích thước trình duyệt trong trường hợp bạn sử dụng css thích ứng, vì vậy tôi đang sử dụng nó để có kết xuất cho bố cục trên thiết bị di động và máy tính bảng cũng như thông thường.
Có khách hàng api cho các ngôn ngữ sau:
PHP , Python , Ruby , Java , .Net C # , Perl và Bash (tập lệnh shell trông giống như nó yêu cầu perl)
Tất cả phụ thuộc vào cách bạn muốn chụp ảnh màn hình.
Bạn có thể làm điều này thông qua PHP, sử dụng dịch vụ web để lấy hình ảnh cho bạn
Grabz.it có một dịch vụ web để làm việc này, đây là một bài viết cho thấy một ví dụ đơn giản về việc sử dụng dịch vụ.
Bạn có thể sử dụng https://grabz.it giải pháp.
Nó có API PHP rất linh hoạt và có thể được gọi theo nhiều cách khác nhau, chẳng hạn như từ trang web cronjob hoặc trang web PHP.
Để triển khai nó, trước tiên bạn cần lấy khóa ứng dụng và bí mật và tải xuống SDK (miễn phí).
Và một ví dụ để thực hiện. Trước hết khởi tạo:
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");
Và ví dụ ảnh chụp màn hình:
// 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");
Tiếp theo là tiết kiệm. Bạn có thể sử dụng một trong hai phương thức lưu, Save
nếu xử lý gọi lại có thể truy cập công khai có sẵn và SaveTo
nếu không. Kiểm tra tài liệu để biết chi tiết .
Tôi đã viết một ứng dụng nhanh và bẩn vào một ngày khác để làm điều này bằng Google API. Chắc chắn phạm vi để cải thiện ...
Tìm nó ở đây với một bản demo và mã trực tiếp .
Tôi đã không đăng mã ở đây chỉ đơn giản vì tôi tiếp tục tinh chỉnh nó và hy vọng khi tôi có thời gian, hãy chuyển đổi nó thành một lớp thích hợp.
Tôi đã sử dụng page2images . Nó được phát triển dựa trên cutycapt rất nhanh và ổn định. Nếu bạn không muốn dành quá nhiều thời gian cho hiệu suất và cấu hình, bạn nên sử dụng nó. Nếu bạn truy cập trang web của họ, bạn có thể tìm thêm chi tiết và mã PHP mẫu.
Sau rất nhiều lần lướt web tôi đã tìm thấy cái này.
PPTRAAS > Một công cụ miễn phí để chụp ảnh màn hình bằng cách chuyển URL của bạn dưới dạng tham số
Họ cung cấp nhiều tùy chọn bằng cách nhấn URL của họ.
Nhận ảnh chụp màn hình toàn trang
https://pptraas.com/sc Muff? url = {URL BẠN TẠI ĐÂY}
Nhận ảnh chụp màn hình trang có kích thước cụ thể
https://pptraas.com/sc Muff? url = {URL BẠN TẠI ĐÂY} & size = 400,400
Một thậm chí có thể chuyển đổi trang sang pdf
https://pptraas.com/pdf?url= {URL BẠN TẠI ĐÂY}
Bạn có thể làm 2 việc.
Sử dụng con rối
Bạn có thể sử dụng gói PHP Puppeteer để quay trình duyệt và chụp ảnh màn hình.
Sử dụng API
Có rất nhiều API ảnh chụp màn hình. Bạn có thể nhìn vào ảnh chụp màn hìnhAPI.net chẳng hạn. (Tuyên bố miễn trừ trách nhiệm Tôi là người tạo API đó)
Không trực tiếp. Phần mềm như Selenium có các tính năng như thế này và có thể được kiểm soát bởi PHP nhưng có các phần phụ thuộc khác (chẳng hạn như chạy máy chủ dựa trên java của họ trên máy tính với trình duyệt bạn muốn chụp màn hình)
bạn có thể sử dụng cutycapt.
kwhtml không được dùng nữa và hiển thị trang như trình duyệt cũ.
Tôi đã thấy đây là công cụ tốt nhất và dễ nhất xung quanh: ScreenShotMachine . Đó là một dịch vụ trả phí, nhưng bạn nhận được 100 ảnh chụp màn hình miễn phí và bạn có thể mua thêm 2.000 với giá khoảng 20 đô la, vì vậy đó là một thỏa thuận khá tốt. Nó có cách sử dụng rất đơn giản, bạn chỉ cần sử dụng một URL, vì vậy tôi đã viết tập lệnh nhỏ này để lưu một tệp dựa trên nó:
<?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!");
?>
Họ có một tài liệu rất tốt ở đây , vì vậy bạn chắc chắn nên xem qua.