Czy istnieje sposób zrobienia zrzutu ekranu strony internetowej w PHP, a następnie zapisania go do pliku?
php
screenshot
Paolo Forgia
źródło
źródło
Odpowiedzi:
OSTATNIA EDYCJA : po 7 latach wciąż otrzymuję głosowanie za tą odpowiedzią, ale myślę, że ta jest teraz znacznie dokładniejsza.
Jasne, że możesz, ale musisz coś wyrenderować stronę. Jeśli naprawdę chcesz używać tylko php, sugeruję ci HTMLTOPS , który renderuje stronę i wyprowadza ją do pliku ps (ghostscript), a następnie przekonwertuj ją na .jpg, .png, .pdf .. może być trochę wolniejszy z złożone strony (i nie obsługują wszystkich CSS).
W przeciwnym razie możesz użyć wkhtmltopdf, aby wydrukować stronę HTML w pdf, jpg, cokolwiek .. Zaakceptuj CSS2.0, użyj webkit (otoki Safari), aby wyrenderować stronę ... więc powinno być dobrze. Musisz go również zainstalować na swoim serwerze ...
AKTUALIZACJA Teraz, dzięki nowej funkcji HTML5 i JS, możliwe jest również renderowanie strony w obiekt kanwy za pomocą JavaScript. Oto fajna biblioteka do zrobienia tego: Html2Canvas, a tutaj jest implementacja tego samego autora, aby uzyskać opinie takie jak G +. Po wyrenderowaniu dom w kanwie, możesz następnie wysłać na serwer za pośrednictwem ajax i zapisać go jako plik jpg.
EDYCJA : Możesz użyć narzędzia imagemagick do przekształcenia pdf na png. Moja wersja wkhtmltopdf nie obsługuje obrazów. Np
convert html.pdf -append html.png
.EDYCJA : Ten mały skrypt powłoki daje prosty / ale działający przykład użycia na systemie Linux z php5-cli i wyżej wymienionymi narzędziami.
EDYCJA : zauważyłem, że zespół wkhtmltopdf pracuje nad innym projektem: wkhtmltoimage, który daje bezpośrednio plik jpg
źródło
Od wersji PHP 5.2.2 możliwe jest przechwytywanie strony internetowej wyłącznie w języku PHP !
Edycja: Uwaga, te funkcje są dostępne TYLKO w systemach Windows!
źródło
Jeśli nie chcesz używać narzędzi innych firm, natknąłem się na proste rozwiązanie, które korzysta z interfejsu API Google Page Insight .
Wystarczy nazwać to api z parametrami
screenshot=true
.W przypadku widoku witryny mobilnej należy
&strategy=mobile
podać parametry,DEMO .
źródło
Do przechwycenia strony możesz użyć prostej przeglądarki bezgłowej, takiej jak PhantomJS.
Możesz także używać PhantomJS z PHP.
Sprawdź ten mały skrypt php, który to robi. Spójrz tutaj https://github.com/microweber/screen
A oto API- http://screen.microweber.com/shot.php?url=/programming/757675/website-screenshots-using-php
źródło
To powinno być dla ciebie dobre:
https://wkhtmltopdf.org/
Pamiętaj, aby pobrać dystrybucję wkhtmltoimage!
źródło
Tak. Będziesz potrzebować kilku rzeczy:
Zobacz khtmld (aemon) na * nx. Zobacz Url2Jpg dla Windows, ale ponieważ jest to aplikacja dotNet, powinieneś również sprawdzić Url2Bmp
Oba są narzędziami konsolowymi, których można użyć z aplikacji internetowej, aby uzyskać zrzut ekranu.
Istnieją również usługi sieciowe, które to oferują. Sprawdź to na przykład.
Edytować:
Ten link jest przydatny.
źródło
Jest w Pythonie, ale przeglądając dokumentację i kod, możesz dokładnie zobaczyć, jak to się robi. Jeśli potrafisz uruchomić Pythona, jest to gotowe rozwiązanie dla Ciebie:
http://browsershots.org/
Pamiętaj, że wszystko może działać na jednej maszynie dla jednej platformy lub jednej maszynie z maszynami wirtualnymi z innymi platformami.
Bezpłatne, open source, przewiń na dół strony, aby znaleźć linki do dokumentacji, kodu źródłowego i innych informacji.
źródło
Tak to jest. Jeśli potrzebujesz tylko obrazu adresu URL, spróbuj tego
Podaj adres URL jako argument, a otrzymasz obraz, aby uzyskać więcej informacji, sprawdź ten link http://zenithwebtechnologies.com.au/auto-thumbnail-generation-from-url.html
źródło
Cóż, PhantomJS to przeglądarka, którą można łatwo umieścić na serwerze i zintegrować z php. Możesz znaleźć kod w WDudes. Obejmują one o wiele więcej funkcji, takich jak określanie rozmiaru obrazu, pamięci podręcznej, pobieranie jako plik lub wyświetlanie w img src itp.
Parametry URL
Szerokość i wysokość: screenshot.php? Url = google.com & w = 1000 & h = 800
Z kadrowaniem: screenshot.php? Url = google.com & w = 1000 & h = 800 & clipw = 800 & cliph = 600
Wyłącz pamięć podręczną i załaduj świeże screesnhot:
screenshot.php? Url = google.com & cache = 0
Aby pobrać obraz: screenshot.php? Url = google.com & download = true
Samouczek możesz zobaczyć tutaj: Przechwyć zrzut ekranu strony internetowej wykorzystującej PHP bez interfejsu API
źródło
cutycapt zapisuje strony internetowe do większości formatów graficznych (jpg, png ..) pobierz je z synaptic, działa znacznie lepiej niż wkhtmltopdf
źródło
Zawsze używam ekranu microweber do robienia zrzutów ekranu dowolnej strony internetowej. Tutaj możemy znaleźć dobrze napisany samouczek . Jest to łatwiejsze i nie powinno zająć więcej niż 3 minuty.
źródło
W końcu skonfigurowałem za pomocą microweber / screen, jak zaproponował @boksiora.
Początkowo, gdy próbuję wspomnieć tutaj link , co mam:
Jestem na Linuksie. Więc jeśli chcesz go uruchomić, możesz dostosować mój krok do swojego środowiska.
Oto krok, który zrobiłem na mojej powłoce na
DOCUMENT_ROOT
folderze:Wskaż swoją przeglądarkę na
screen/demo/shot.php?url=google.com
. Gdy zobaczysz zrzut ekranu , gotowe. Dyskusja na temat bardziej zaawansowanych ustawień jest dostępna tutaj i tutaj .źródło
Istnieje wiele projektów typu open source, które mogą generować zrzuty ekranu. Na przykład PhantomJS, webkit2png itp
Dużym problemem związanym z tymi projektami jest to, że opierają się one na starszej technologii przeglądarki i mają problemy z renderowaniem wielu witryn, zwłaszcza witryn korzystających z webfontów, flexboksa, svg i różnych innych dodatków do specyfikacji HTML5 i CSS w ciągu ostatnich kilku miesięcy / lat.
Wypróbowałem kilka usług stron trzecich, a większość z nich oparta jest na PhantomJS, co oznacza, że produkują również zrzuty niskiej jakości. Najlepszą zewnętrzną usługą do generowania zrzutów ekranu z witryny jest urlbox.io . Jest to usługa płatna, chociaż istnieje bezpłatna 7-dniowa wersja próbna, aby przetestować ją bez zobowiązania się do żadnego płatnego planu.
Oto link do dokumentacji , a poniżej znajdują się proste kroki, aby uruchomić ją w PHP z kompozytorem.
Na przykład oto zrzut ekranu tej samej strony w pełnej wysokości:
https://api.urlbox.io/v1/ca482d7e-9417-4569-90fe-80f7c5e1c781/8f1666d1f4195b1cb84ffa5f992ee18992a2b35e/png?url=http%3A%2F%2Fstackoverestions%%Ffack76 2F43652083% 2343652083 & full_page = true
źródło
Istnieje wiele opcji i wszystkie mają swoje zalety i wady. Oto lista opcji uporządkowanych według stopnia trudności implementacji.
Opcja 1: Użyj interfejsu API (najłatwiejszego)
Plusy
Cons
Opcja 2: Użyj jednej z wielu dostępnych bibliotek
Plusy
Cons
Opcja 3: Użyj PhantomJs i być może biblioteki otoki
Plusy
Cons
Opcja 4: użyj Chrome Headless i być może biblioteki otoki
Plusy
Cons
Oświadczenie: Jestem założycielem ApiFlash. Dałem z siebie wszystko, aby udzielić uczciwej i pożytecznej odpowiedzi.
źródło
Korzystam z systemu Windows, więc mogłem korzystać z funkcji imagegrabwindow po przeczytaniu podpowiedzi tutaj ze Stephana. Dodałem kadrowanie (aby pozbyć się nagłówka przeglądarki, pasków przewijania itp.) I zmianę rozmiaru, aby uzyskać ostateczny obraz. Oto mój kod . Mam nadzieję, że komuś pomoże.
źródło
webkit2html działa na Mac OS X i Linux, jest dość prosty w instalacji i obsłudze. Zobacz ten samouczek .
W systemie Windows możesz przejść z CutyCapt , który ma podobną funkcjonalność.
źródło
Użyłem Blugi . Interfejs API pozwala na zrobienie 100 migawek miesięcznie bez płacenia, ale czasami wykorzystuje więcej niż 1 kredyt na pojedynczą stronę. Właśnie skończyłem aktualizację modułu drupal, Bluga WebThumbs do drupal 7, który pozwala wydrukować miniaturę w szablonie lub filtrze wejściowym.
Główną zaletą korzystania z tego interfejsu API jest to, że pozwala on określić wymiary przeglądarki w przypadku korzystania z adaptacyjnego css, więc używam go, aby uzyskać rendering dla układu telefonu i tabletu, a także zwykłego.
Istnieją klienci interfejsu API dla następujących języków:
PHP , Python , Ruby , Java , .Net C # , Perl i Bash (skrypt powłoki wygląda tak, jakby wymagał perla)
źródło
Wszystko zależy od tego, jak chcesz zrobić zrzut ekranu.
Możesz to zrobić za pośrednictwem PHP, korzystając z usługi internetowej, aby uzyskać obraz dla Ciebie
grabz.it ma do tego właśnie usługę internetową, oto artykuł pokazujący prosty przykład korzystania z usługi.
http://www.phpbuilder.com/articles/news-reviews/miscellaneous/capture-screenshots-in-php-with-grabzit-120524022959.html
źródło
Możesz użyć rozwiązania https://grabz.it .
Ma PHP API, które jest bardzo elastyczne i może być wywoływane na różne sposoby, na przykład z cronjob lub strony internetowej PHP.
Aby go zaimplementować, musisz najpierw uzyskać klucz aplikacji i klucz tajny oraz pobrać (bezpłatny) zestaw SDK.
I przykład wdrożenia. Przede wszystkim inicjalizacja:
I przykład zrzutu ekranu:
Następnym krokiem jest zapisanie. Możesz użyć jednej z dwóch metod zapisu,
Save
jeśli dostępny jest publicznie dostępny uchwyt wywołania zwrotnego, aSaveTo
jeśli nie. Sprawdź w dokumentacji szczegółów .źródło
Napisałem szybką i brudną aplikację, która zrobiła to za pomocą Google API. Z pewnością zakres ulepszeń ...
Znajdź go tutaj z prezentacją na żywo i kodem .
Nie opublikowałem tutaj kodu po prostu dlatego, że wciąż go udoskonalam i mam nadzieję, że kiedy będę miał czas, przekonwertuję go na odpowiednią klasę.
źródło
Użyłem page2images . Jest opracowany w oparciu o cutycapt, który jest naprawdę szybki i stabilny. Jeśli nie chcesz spędzać zbyt wiele czasu na wydajności i konfiguracji, powinieneś go użyć. Jeśli wejdziesz na ich stronę internetową, możesz znaleźć więcej szczegółów i przykładowy kod PHP.
źródło
Po wielu surfowaniu w sieci znalazłem to.
PPTRAAS > Darmowe narzędzie do robienia zrzutów ekranu poprzez podanie adresu URL jako parametru
Zapewniają wiele opcji, po prostu naciskając ich adres URL.
Pobierz pełny zrzut ekranu
https://pptraas.com/screenshot?url= {YOU URL HERE}
Uzyskaj zrzut ekranu o określonym rozmiarze
https://pptraas.com/screenshot?url= {YOU URL HERE} & size = 400,400
Można nawet przekonwertować stronę na pdf
https://pptraas.com/pdf?url= {YOU URL HERE}
źródło
Możesz zrobić 2 rzeczy.
Użyj Puppeteer
Możesz użyć pakietu PHP Puppeteer, aby uruchomić przeglądarkę i zrobić zrzut ekranu.
Użyj interfejsu API
Istnieje wiele interfejsów API zrzutów ekranu. Możesz na przykład spojrzeć na ScreenshotAPI.net . (Oświadczenie Jestem twórcą tego API)
źródło
Nie bezpośrednio. Oprogramowanie takie jak Selenium ma takie funkcje i może być kontrolowane przez PHP, ale ma też inne zależności (takie jak uruchamianie serwera opartego na Javie na komputerze z przeglądarką, którą chcesz zrzut ekranu)
źródło
możesz użyć cutycapt.
Kwhtml jest przestarzałe i pokazuje stronę jak stara przeglądarka.
źródło
Uważam, że jest to najlepsze i najłatwiejsze narzędzie: ScreenShotMachine . Jest to usługa płatna, ale dostajesz 100 bezpłatnych zrzutów ekranu i możesz kupić kolejne 2000 za (około) 20 USD, więc jest to całkiem dobra oferta. Ma bardzo proste użycie, wystarczy użyć adresu URL, więc napisałem ten mały skrypt, aby zapisać plik na jego podstawie:
Mają bardzo dobrą dokumentację tutaj , więc powinno się przyjrzeć.
źródło