PHP로 웹 사이트의 스크린 샷을 만든 다음 파일로 저장하는 방법이 있습니까?
PHP로 웹 사이트의 스크린 샷을 만든 다음 파일로 저장하는 방법이 있습니까?
답변:
마지막 편집 : 7 년 후에도 여전히이 답변에 대한 찬성 투표를하고 있지만이 답변 이 훨씬 정확하다고 생각 합니다.
물론 가능하지만 페이지를 무언가로 렌더링해야합니다. 실제로 PHP 만 사용 하려면 페이지를 렌더링하고 ps 파일 (ghostscript)로 출력 한 HTMLTOPS를 제안 하고 .jpg, .png, .pdf ..로 변환하면 조금 느려질 수 있습니다 복잡한 페이지 (모든 CSS를 지원하지는 않음)
그렇지 않으면 wkhtmltopdf 를 사용 하여 pdf, jpg 등으로 html 페이지를 출력 할 수 있습니다. CSS2.0 을 수락하고 웹킷 (safari의 래퍼)을 사용하여 페이지를 렌더링하십시오. 서버에도 설치해야합니다.
업데이트 이제 새로운 HTML5 및 JS 기능을 통해 JavaScript를 사용하여 페이지를 캔버스 객체로 렌더링 할 수도 있습니다. 여기에 좋은 라이브러리가 있습니다 : Html2Canvas 그리고 여기는 같은 저자가 G +와 같은 피드백을 얻는 구현 입니다. dom을 캔버스에 렌더링 한 후에는 ajax를 통해 서버로 전송하여 jpg로 저장할 수 있습니다.
편집 : pdf를 png로 변환하기 위해 imagemagick 도구를 사용할 수 있습니다. 내 wkhtmltopdf 버전은 이미지를 지원하지 않습니다. 예 convert html.pdf -append html.png
.
편집 : 이 작은 쉘 스크립트 는 php5-cli 및 위에서 언급 한 도구를 사용하여 Linux에서 간단하지만 작동하는 사용법 예제를 제공합니다.
편집 : 나는 wkhtmltopdf 팀이 다른 프로젝트를 진행하고 있음을 알았습니다 : wkhtmltoimage, jpg를 직접 제공합니다.
PHP 5.2.2부터 PHP 만으로 웹 사이트를 캡처 할 수 있습니다 !
imagegrabscreen — 전체 화면을 캡처합니다
<?php
$img = imagegrabscreen();
imagepng($img, 'screenshot.png');
?>
imagegrabwindow -Windows 핸들 (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와 같은 간단한 헤드리스 브라우저를 사용하여 페이지를 가져올 수 있습니다.
또한 PhantomJS를 PHP와 함께 사용할 수 있습니다.
이 작은 PHP 스크립트를 확인하십시오. 여기 좀보세요 https://github.com/microweber/screen을
그리고 여기 API- http://screen.microweber.com/shot.php?url=/programming/757675/website-screenshots-using-php
예. tho가 필요합니다.
* nx의 khtmld (aemon) 를 참조하십시오 . Windows 용 Url2Jpg 를 참조하십시오. 그러나 dotNet 앱 이므로 Url2Bmp 도 확인해야합니다.
둘 다 웹 앱에서 스크린 샷을 얻을 수있는 콘솔 도구입니다.
이를 제공하는 웹 서비스도 있습니다. 예를 들어 이것을 확인하십시오 .
편집하다:
이 링크 는 유용합니다.
파이썬으로되어 있지만 설명서와 코드를 살펴보면 이것이 어떻게 수행되는지 정확히 알 수 있습니다. 파이썬을 실행할 수 있다면 기성품 솔루션입니다.
하나의 플랫폼에 대해 하나의 시스템 또는 다른 플랫폼을 실행하는 가상 시스템이있는 하나의 시스템에서 모든 것을 실행할 수 있습니다.
문서, 소스 코드 및 기타 정보에 대한 링크를 보려면 무료 오픈 소스 페이지 하단으로 스크롤하십시오.
그렇습니다. 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
캐시를 비활성화하고 새로운 screesnhot을로드하십시오.
screenshot.php? url = google.com & cache = 0
이미지를 다운로드하려면 screenshot.php? url = google.com & download = true
당신은 여기 자습서를 볼 수 있습니다 : API없이 PHP를 사용하여 웹 사이트의 스크린 샷 캡처
나는 항상 웹 페이지의 스크린 샷을 캡처하기 위해 마이크로 웹 화면 을 사용 합니다. 여기서 우리는 잘 작성된 튜토리얼을 찾을 수 있습니다 . 이것은 쉬우 며 배우는 데 3 분 이상 걸리지 않아야합니다.
@boksiora 가 제안한대로 마이크로 웨버 / 스크린 을 사용하여 마침내 설정했습니다 .
처음에 언급 된 링크를 시도 할 때 내가 얻은 것 :
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
. 스크린 샷 이 표시되면 완료된 것입니다. 더 많은 사전 설정에 대한 토론은 여기 와 여기에서 볼 수 있습니다 .
스크린 샷을 생성 할 수있는 많은 오픈 소스 프로젝트가 있습니다. 예를 들어 PhantomJS, webkit2png 등
이 프로젝트의 큰 문제는 이전 브라우저 기술을 기반으로하며 많은 사이트, 특히 웹 폰트, flexbox, svg 및 지난 몇 달 / 년 동안 HTML5 및 CSS 사양에 다양한 추가 기능을 사용하는 사이트를 렌더링하는 데 문제가 있다는 것입니다.
제 3 자 서비스 중 일부를 시도해 보았으며 대부분 PhantomJS를 기반으로하므로 품질이 좋지 않은 스크린 샷을 생성합니다. 웹 사이트 스크린 샷 생성을위한 최고의 타사 서비스는 urlbox.io 입니다. 유료 서비스이지만 유료 요금제를 사용하지 않고 테스트하는 7 일 무료 평가판이 있습니다.
다음은 문서에 대한 링크 이며, 아래는 composer를 사용하여 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" />
예를 들어 다음은이 페이지의 전체 높이 스크린 샷입니다.
많은 옵션이 있으며 모두 장단점이 있습니다. 다음은 구현 난이도별로 정렬 된 옵션 목록입니다.
찬성
단점
찬성
단점
찬성
단점
찬성
단점
면책 조항 : 저는 ApiFlash의 설립자입니다. 나는 정직하고 유용한 답변을 제공하기 위해 최선을 다했습니다.
나는 bluga를 사용 했습니다 . api를 사용하면 한 달에 100 번의 스냅 샷을 만들 수 있지만 때로는 단일 페이지에 대해 1 점 이상의 크레딧을 사용합니다. 드루팔 모듈 인 Bluga WebThumbs 업그레이드를 마쳤습니다. 를 drupal 7로 하여 템플릿 또는 입력 필터에 축소판을 인쇄 할 수있었습니다.
이 API를 사용하는 주요 이점은 적응 형 CSS를 사용하는 경우 브라우저 크기를 지정할 수 있다는 것입니다. 따라서 일반 및 태블릿 레이아웃뿐만 아니라 모바일 및 태블릿 레이아웃에 대한 렌더링을 얻는 데 사용하고 있습니다.
다음 언어의 API 클라이언트가 있습니다.
PHP , Python , Ruby , Java , .Net C # , Perl 및 Bash (쉘 스크립트에는 perl이 필요한 것처럼 보입니다)
스크린 샷을 찍는 방법에 따라 다릅니다.
웹 서비스를 사용하여 PHP를 통해 이미지를 얻을 수 있습니다.
grabz.it에는 웹 서비스가 있으며이를위한 간단한 서비스 예제가 있습니다.
https://grabz.it 솔루션을 사용할 수 있습니다 .
그것은 매우 유연하고 cronjob이나 PHP 웹 페이지와 같은 다른 방법으로 호출 될 수있는 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");
Save
공개적으로 액세스 할 수있는 콜백 핸들을 사용할 수 있고 SaveTo
그렇지 않은 경우 두 가지 저장 방법 중 하나를 사용할 수 있습니다 . 자세한 내용 은 설명서를 확인 하십시오 .
다른 날에 Google API를 사용하여 빠르고 더러운 앱을 작성했습니다. 확실히 개선의 여지가 있습니다 ...
라이브 데모 및 코드 와 함께 여기에서 찾으십시오 .
코드를 계속 수정하고 시간이 있으면 적절한 클래스로 변환하기 때문에 코드를 여기에 게시하지 않았습니다.
나는 page2images를 사용 했다 . 그것은 정말 빠르고 안정적 인 cutycapt를 기반으로 개발되었습니다. 성능 및 구성에 너무 많은 시간을 소비하지 않으려면이를 사용해야합니다. 그들의 웹 사이트를 방문하면 자세한 내용과 샘플 PHP 코드를 찾을 수 있습니다.
웹 서핑을 많이 한 후에 이것을 발견했습니다.
PPTRAAS > URL을 매개 변수로 전달하여 스크린 샷을 캡처하는 무료 도구
URL을 누르기 만하면 여러 옵션을 제공합니다.
전체 페이지 스크린 샷 받기
https://pptraas.com/screenshot?url= {YOU URL HERE}
특정 크기의 페이지 스크린 샷 가져 오기
https://pptraas.com/screenshot?url= {여기에 URL 여기} & size = 400,400
페이지를 pdf로 변환 할 수도 있습니다.
https://pptraas.com/pdf?url= {여기서 URL}
두 가지 일을 할 수 있습니다.
인형극 사용
PHP Puppeteer 패키지 를 사용하여 브라우저를 가동시키고 스크린 샷을 만들 수 있습니다.
API 사용
많은 스크린 샷 API가 있습니다. 예를 들어 ScreenshotAPI.net 을 볼 수 있습니다. (면책 조항 나는 해당 API의 작성자입니다)
직접 아닙니다. Selenium과 같은 소프트웨어에는 이와 같은 기능이 있으며 PHP로 제어 할 수 있지만 다른 종속성 (예 : 스크린 샷하려는 브라우저로 컴퓨터에서 Java 기반 서버 실행)이 있습니다.
이 도구가 ScreenShotMachine 주위에서 가장 쉽고 가장 쉬운 도구라는 것을 알았습니다 . 유료 서비스이지만 100 개의 무료 스크린 샷을 얻을 수 있으며 (약) $ 20에 2,000을 추가로 구입할 수 있으므로 꽤 좋은 거래입니다. 그것은 매우 간단한 사용법을 가지고 있습니다, 당신은 URL을 사용하기 때문에, 나는 그것을 기반으로 파일을 저장하기 위해이 작은 스크립트를 썼습니다 :
<?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!");
?>
그들은 여기에 매우 좋은 문서를 가지고 있으므로 분명히 살펴보십시오.