сделать снимок сайта php

Как получить скриншот сайта через URL, используя PHP

сделать снимок сайта php. Смотреть фото сделать снимок сайта php. Смотреть картинку сделать снимок сайта php. Картинка про сделать снимок сайта php. Фото сделать снимок сайта php

Создание снимков сайта в реальном времени используется для различных целей в веб-программировании. Существует множество сервисов (прикладных интерфейсов), позволяющих сделать скриншот страницы. Но, если вам нужно сделать свой собственный скрипт для создания скриншота сайта через URL, вы можете это легко сделать, используя PHP и Google PageSpeed Insights API.

В основном, Google PageSpeed Insights API используется для оценки производительности веб-страницы. Но, помимо этого, вы можете использовать Google PageSpeed Insights API, для получения снимка страниц сайта через URL адрес.

Следующий пример скрипта делает снимок произвольной страницы сайта URL адрес, которой определяется пользователем. Затем этот снимок, отображается на странице.

Получение скриншота сайта через URL.

Для создания снимка экрана, на сервис Google PageSpeed Insights необходимо послать запрос со следующими параметрами.

// вызов методов сервиса
$api_data = file_get_contents(«https://www.googleapis.com/pagespeedonline/v2/runPagespeed?url=$url&screenshot=true»);
// расшифровка данных** json
$api_data = json_decode($api_data, true);

// отображаем изображение
echo » «;

Захват снимка экрана через URL.

В этом примере мы создадим форму, в которую пользователь сможет ввести адрес страницы, скриншот которой он хочет получить.

Форма достаточно проста: она содержит одно поле ввода, которое принимает адрес сайта. После нажатия кнопки в дело вступает PHP скрипт.

До того момента, как мы непосредственно воспользуемся сервисом для создания снимков сайтов, нам необходимо провести проверку введенных пользователем данных на корректность. Вот код:

Таким образом, все за 10 минут можно создать собственный сервис по созданию скриншотов сайта. На этом все. Спасибо.

сделать снимок сайта php. Смотреть фото сделать снимок сайта php. Смотреть картинку сделать снимок сайта php. Картинка про сделать снимок сайта php. Фото сделать снимок сайта php

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Комментарии ( 3 ):

Слишком мелкий скрин получается, нельзя получать покрупнее?

Мы решили не париться с этим на PHP, а использовали готовый сервис https://pikwy.com, убили сразу пару зайцев =)) Статья интересная, но есть один минус, если страницы нет в индексе гугла, то скрина не будет.

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

Copyright © 2010-2021 Русаков Михаил Юрьевич. Все права защищены.

Источник

Как сделать скриншот сайта по URL на PHP

В этой статье я покажу вам, как можно средствами PHP создать скриншот любой веб-страницы. Для решения этой задачи существует множество различных сервисов, предоставляющих API для создания скриншотов. В этой статье я буду использовать Google API, позволяющее запросто сделать скриншот по указанному URL-адресу. Преимуществом использования Google API в том, что для его использования не потребуется регистрация, или дополнительная настройка чего-либо. Скрипт, который мы напишем по ходу этой статьи можно будет скопировать и использовать, без дополнительных настроек и переписывания кода.

Disclaimer

Рассматривая подробнее Google API PageSpeed URL, можно увидеть, что здесь есть 3 основных параметра:

Запрос к API

Я сделал скрин на примере моего блога, потому полный URL-адрес выглядит так: https://www.googleapis.com/pagespeedonline/v2/runPagespeed?screenshot=true&strategy=mobile&url=https://badcode.ru

Для преобразования google-формата картинки к обычному, читаемому base64, нужно преобразовать следующие символы:

Ограничения

Полный пример

В этом примере я объединил все замечания, рассмотренные в этой статье, и создал функцию, которая сохраняет скриншот URL-страницы на компьютер.

Вот так, оказывается, просто написать php скрипт создания скриншотов сайтов. Теперь вы можете делать скриншот страницы на php в любом своём приложении.

Subscribe to Блог php программиста: статьи по PHP, JavaScript, MySql

Get the latest posts delivered right to your inbox

Источник

imagegrabscreen

(PHP 5 >= 5.2.2, PHP 7, PHP 8)

imagegrabscreen — Захватывает изображение с экрана

Описание

Функция доступна только в Windows.

Список параметров

У этой функции нет параметров.

Возвращаемые значения

Возвращает объект изображения в случае успешного выполнения, false в случае возникновения ошибки.

Список изменений

ВерсияОписание
8.0.0В случае успешного выполнения функция теперь возвращает экземпляр GDImage ; ранее возвращался ресурс ( resource ).

Примеры

Пример #1 Пример использования imagegrabscreen()

В этом примере показано, как сделать снимок экрана и сохранить его, как png картинку.

Смотрите также

User Contributed Notes 3 notes

If you have multiple displays set up, this function will only grab the primary display; not all of them like you would with the ‘Print Screen’ key.

Also, this should be pretty obvious but I’ll mention it anyway, if you’re running GPU-intensive applications (not CPU), calling this function will cause quite some significant lag to your machine and server response until the request is complete.

if you for whatever reason need this in Cygwin, this can be done with the library at https://github.com/divinity76/autoit_php

— cygwin-compatible rough equivalent:

Источник

Создание полноразмерных скриншотов web-ресурсов

Довольно полезным сервисом является создание полноразмерных скриншотов web-ресурсов.
Реализуем этот сервис буквально за 5 минут.

Задачи:

1) Создание полноразмерных скриншотов сайтов (полный скриншот по длине и ширине, а не захват окна браузера)
2) веб-интерфейс

Технологии:

— ОС — Ubuntu 10.04
— xvfb — Виртуальный фреймбуффер (Fake Xserver)
— CutyCapt — кроссплатформенная утилита для рендеринга web-страниц
— php — для веб-интерфейса

Реализация:

— Установка ПО
1. Установка xvfb

aptitude install xvfb

2. Установка CutyCapt
2.1 Сперва устанавливаем Subversion.

aptitude install subversion libqt4-webkit libqt4-dev g++

2.2 После установки SVN создаем директорию для CutyCapt и скачиваем исходники:
Далее приступим к сборке:

cd cutycapt/CutyCapt
qmake
make

Проверяем работу в консоли
— Веб-интерфейс
3.1 Напишем простой php-скрипт для создания скриншотов

Вывод:

Вот таким, довольно легким способом мы получили удобный скриншотер сайтов, который отлично делает скриншоты сайтов с Flash, и создает скриншот в полный размер, а не обрезает его по размеру окна браузера.

Пример:

Все действия проделанные в данной заметке реализованы тут.
Временно недоступен.

Спасибо за внимание.

UPD:
Само по себе создание скриншота довольно ресурсоемкое и требуются значительные временные затраты на создание скриншота. (естественно, зависит и от канала запрашиваемого сайта).
Данный пример расположен на слабеньком VDS, и может не выдержать нагрузки.
Посему, прошу не сетовать, если пример будет недоступен.

UPD2:
Мой слабенький VDS, к сожалению, не осиливает такой нагрузки, поэтому, вернее всего пример будет недоступен.

Источник

Пишем простую программу захвата скриншотов

Существует множества различных программ для захвата изображений с экрана, их редактирования «прямо на экране» и загрузки на различные сервисы. Это всё хорошо, но большинство программ привязаны к определённым сервисам и не дают возможности загружать куда-либо ещё. В голове давно уже крутилась мысль создать свой простенький сервис загрузки картинок под свои нужды. И я хочу поделиться историей разработки данной программы.

Не долго думая и имея под рукой Visual Studio 2015 конечно же создал новый C# проект т.к. это очень удобно и я уже делал ранее небольшие C# программы.

Задача первая

Глобальный перехват нажатия кнопок PrintScreen и Alt+PrintScreen. Чтобы не изобретать велосипед, пару минут гугления и почти сразу нашлось решение. Суть заключается в использовании callback-функции LowLevelKeyboardProc и функции SetWindowsHookEx с WH_KEYBOARD_LL из user32.dll. С небольшой модификацией под перехват двух комбинаций код заработал и успешно ловит нажатия клавиш.

Задача вторая

Задача третья

Сохранения скриншота на компьютер, тут всё очень просто достаточно было использовать функцию Bitmap.Save.

Задача четвёртая

Загрузка скриншота на сервер, тут вроде кажется, что всё просто, но это не совсем так. После небольшого размышления пришла в голову довольно простая идея — загружать скриншот при помощи WebClient в бинарном формате используя заголовок «application/octet-stream» и функцию WebClient.UploadData, а на стороне сервера брать данные с помощью file_get_contents(«php://input»). Собственно так и поступил, написал очень простой php скрипт в пару строк и привязал всё это дело к программе. Итог — скриншоты сохраняет и загружает. Вместе с этим надо было найти простой алгоритм генерации коротких ссылок, итого нагуглил очень простой и элегантный способ заключающийся в использовании Base36, взяв за int unix время в секундах (linux epoch).

Принимающий PHP-скрипт

Редактирование скриншотов

Далее захотелось также как-то быстро редактировать скриншоты и загружать их на сервер. Вместо изобретения очередного редактора изображений родилась очень простая идея — сделать кнопку «редактировать» которая открывала paint с захваченным скриншотом (последним что сохранил на диск), а после редактирования можно было спокойно загрузить этот файл на сервер.

Настройки

Также надо было где-то указывать url сайта и папку по умолчанию куда сохранять скриншоты, в итоге создал простенькую форму настроек где это можно было указать. Ну и вдобавок сделал кнопку «открыть папку» чтобы всё было ещё проще и быстрее с помощью функции System.Diagnostics.Process.Start. Кроме этого быстро научил программу сворачиваться в трей.

Итак после всего этого был готов первый рабочий прототип, и выглядел он так:

сделать снимок сайта php. Смотреть фото сделать снимок сайта php. Смотреть картинку сделать снимок сайта php. Картинка про сделать снимок сайта php. Фото сделать снимок сайта php

Предосмотр

Всё вроде бы хорошо, но стало понятно чего не хватает. А не хватало кнопки предосмотра! Было несколько не удобно открывать папку или нажимать редактировать чтобы только посмотреть что же захватилось с экрана перед отправкой. В итоге быстро набросал форму предосмотра, была небольшая проблема с отображением полноэкранного скриншота в форме (она ведь с рамками), рамки удалять не хотелось (даже не знаю почему), в итоге сделал скрол в форме и меня такое полностью устроило.

Формат изображений

Кроме этого появилась также необходимость сохранения скриншотов в разных форматах (а не только PNG как по умолчанию), благо всё это легко решается с помощью всё той же функции Bitmap.Save, правда вот качество jpg изображений меня не устроило. Возможность указать качество у jpg было не так очевидно, быстрое гугление и есть решение. Реализуется с помощью доп параметра EncoderParameter к Bitmap.Save.

Также родилась идея автоматического открытия папки после сохранения скриншота, а также авто открытию ссылки после загрузки. Быстро это реализовал и добавил галочки в настройки. Ещё добавил функцию копирования ссылки в буфер обмена.

После добавления кнопки предосмотр, программа как-то стала выглядеть «не так», расположение кнопок было разбросано, подумал немного, и попереставлял кнопки, так что вышло следующее:

сделать снимок сайта php. Смотреть фото сделать снимок сайта php. Смотреть картинку сделать снимок сайта php. Картинка про сделать снимок сайта php. Фото сделать снимок сайта php

Мелкие доработки

Немного передохнув и подумав, понял чего ещё не хватает — информации о последней загрузке скриншота. Сделал соответствующее поле, при нажатии на которое можно было перейти по ссылке. Помимо этого сделал кнопки сохранения/редактирования недоступными пока не сделаешь скриншот. Ну и ещё один штрих — добавил кнопку «о программе» с кратким описанием, версией и датой билда (кстати для получения даты опять нагуглил решение, получая дату с заголовка самого приложения).

Итого после этих действий вышло следующее:

сделать снимок сайта php. Смотреть фото сделать снимок сайта php. Смотреть картинку сделать снимок сайта php. Картинка про сделать снимок сайта php. Фото сделать снимок сайта php

Чуть позже понял что также не хватает отображения последнего сохранённого файла, что быстро добавил, а ещё сделал эти поля более функциональными — прикрутив контекстное меню (при щелчке правой кнопкой мышью) где можно было скопировать ссылку/путь в буфер обмена при помощи Clipboard.SetText.

Готовность программы, локализация

Ну и вроде бы основной функционал был готов, всё работало, и подумал я — может поделиться программой с народом? Если делать это, тогда нужно как минимум сделать возможность локализации и добавить английский язык. Благо студия легко позволяет всё это реализовать штатными средствами, начал я всё это дело переводить. Итого получилось:

сделать снимок сайта php. Смотреть фото сделать снимок сайта php. Смотреть картинку сделать снимок сайта php. Картинка про сделать снимок сайта php. Фото сделать снимок сайта php

Для перевода некоторых сообщений нужно было создать новые файлы ресурсов и потом брать из него строки следующим образом:

Файл с русским языком у меня WinFormStrings.resx, для английского WinFormStrings.en.resx, которые положил в папку Resources.

Но чтобы сменить язык требовалась перезагрузка приложения, конечно хотелось чтобы можно было обойтись без этого, к счастью есть решение этого вопроса, которое я быстро применил. Помимо этого также надо было получить список поддерживаемых языков приложением (на будущее, если вдруг будут ещё локализации), итого нагугли такое решение, всё это объединив получилась следующая конструкция:

Проблема захвата границ у окна

А теперь я вернусь к проблеме захвата границ окна, этот вопрос сначала был решён с помощью функции автоматической обрезки окна (которую я добавил в настройки), указав значения для windows 10, но это был скорее костыль чем решение. Чтобы было понятнее о чём речь вот скриншот того что я имею ввиду:

сделать снимок сайта php. Смотреть фото сделать снимок сайта php. Смотреть картинку сделать снимок сайта php. Картинка про сделать снимок сайта php. Фото сделать снимок сайта php

(скриншот с более новой версии)

Как видно на скриншоте — кроме окна захватывало его границы и то что под ними. Довольно долго гуглил как решить эту проблему, но потом наткнулся на эту статью, где собственно описывалось решение вопроса, суть заключается в том что на windows vista и новее нужно использовать dwmapi для получения корректных границ окна с учётом aero и тд. С небольшой модификацией своего кода успешно привязал к dwmapi и проблема наконец была полностью решена. Но т.к. функционал обрезки окна уже был написан, решил оставить его, возможно кому-то будет полезен.

Поддержка imgur

Потом ещё подумав, раз я собираюсь публиковать программу для всех, то наверное было бы неплохо кроме загрузки на свой сервер сделать загрузку на какой-то сервис, ведь тогда программа будет более полезной, и не нужно иметь обязательно свой сервер для её использования, т.к. я давно использую imgur.com и у него есть простой api, то решил сделать привязку к нему. Посидев поизучав его api сначала реализовал анонимную загрузку, а чуть позже и возможность привязки аккаунта. Кроме этого реализовал возможность удаления последнего загруженного изображения в программе (для их сервиса только).

Итого получилась вполне работоспособная и функциональная программа, которой уже можно было делать куда больше вещей, чем я планировал делать изначально.

Список настроек на тот момент выглядел так:

сделать снимок сайта php. Смотреть фото сделать снимок сайта php. Смотреть картинку сделать снимок сайта php. Картинка про сделать снимок сайта php. Фото сделать снимок сайта php

Совместимость с Win XP

История событий

По большому счёту думал что всё, на этом хватит, можно релизить, но всё же по прежнему чего-то не хватало — истории действий с логом. Начал разработку соответствующего окна с некоторыми функциями, как удаления файла с пк и imgur, открытие файла/ссылки, копирования пути/ссылки с помощью контекстного меню. Также сделал возможность сохранить события в лог файл как из списка, так и автоматически задав в настройках.

Вышло вполне информативное окно:

сделать снимок сайта php. Смотреть фото сделать снимок сайта php. Смотреть картинку сделать снимок сайта php. Картинка про сделать снимок сайта php. Фото сделать снимок сайта php

Проблема в работе HookCallback на Win XP

Но вылезла одна проблема — на Windows XP при захвате сркиншотов запись добавлялась дважды. В ходе тестов выяснил, что HookCallback вызывается дважды при отпускании клавиши, причина такого поведения мне была не ясна, но решил вопрос довольно легко — сделал дополнительную проверку нажатия клавиши сохраняя это в переменную, а при отпускании клавиши изменение переменной на false, в итоге нужный мне код стал обрабатываться лишь 1 раз при отпускании клавиши.

Проблема захвата скриншотов из игр

Чуть позже в ходе тестирования столкнулся с проблемой захвата скриншотов из полноэкранных приложений (например игры), заметил что в windows 10 штатный printscreen захватывает это дело без проблем, в итоге добавил функцию вставки изображения из буфера обмена, а также добавил галочку «использовать буфер обмена вместо захвата» в настройки, тем самым «решил вопрос» для себя, но как оказалось в win 7 и ниже это не работает, начал изучать вопрос, и понял что это довольно сложная задача, с необходимостью использования directx инъекций, в итоге попросту забил на эту проблему, всё-таки основная цель не захват скриншотов из игр, для этого существует множество других программ и инструментов.

Попутно добавив настройки переделал меню настроек, сделал его более компактным чтобы вмещалось на экран с разрешением 640*480 пикселей, и оно стало выглядеть так:

сделать снимок сайта php. Смотреть фото сделать снимок сайта php. Смотреть картинку сделать снимок сайта php. Картинка про сделать снимок сайта php. Фото сделать снимок сайта php

Также сделал более функциональным иконку в трее, добавив туда все важные функции при щелчке правой кнопкой:

сделать снимок сайта php. Смотреть фото сделать снимок сайта php. Смотреть картинку сделать снимок сайта php. Картинка про сделать снимок сайта php. Фото сделать снимок сайта php

Проверка на Win98 и Win2000

Как оказалось на Windows 2000 SP4 приложение оказалось полностью рабочим, а вот на Windows 98 SE захват клавиш не работал, вставка из буфера тоже не работает, однако загрузка скриншота из файла работает без проблем. Собственно эти проблемы решить не получилось, информации крайне мало, всё что смог выяснить — параметр «WH_KEYBOARD_LL» добавили лишь в Windows 2000. А о причине не работающей вставки изображения из буфера вообще не нашёл никакой информации. Итого мин требования — Windows 2000.

Итак после некоторых проверок, дебага и мелких фиксов программа была наконец готова, и финальный вариант выглядит так:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *