Получить снимок эскизов веб-сайта с помощью C

#c #thumbnails #snapshot

#c #эскизы #снимок

Вопрос:

Есть ли какой-либо способ получить изображение веб-страницы с помощью CGI C ? Я искал повсюду, и хотя я нашел ряд реализаций во всем, от Perl до C #, не смог найти ни одной реализации на C .

Идея заключается в том, чтобы пользователь, посещающий сайт, мог указать URL. Затем скрипт сделает снимок веб-сайта с URL-адресом, а затем покажет, как загрузить его на веб-сайт C CGI, который я создаю.

Любая помощь по этому вопросу была бы высоко оценена!

Спасибо!

Пример на Perl: Webthumb

Комментарии:

1. Какой код использовался в реализациях C #? Практически все, что вы можете написать на C #, можно легко перенести в приложение Win32 C .

2. Как в методе, где аргументом является URL?

3. @Bart — да, как в методе, который принимает URL-адрес в качестве аргумента, делает снимок указанного URL-адреса и сохраняет его в папке (или показывает его непосредственно на другом веб-сайте). По сути, я разрабатываю веб-сайт CGI на C , и как часть требования, мне нужно иметь возможность показывать большие буквы веб-сайтов. Хотя, поскольку никто в здравом уме не стал бы писать веб-сайт CGI на C , исходный материал там немного короткий 🙂

4. @Cody — попытаюсь найти их снова … хотя я думаю, что для них требовались специальные библиотеки C #…

5. Кроме того, эскиз, по-видимому, является значком? Это простой HTTP GET. Если это больше, то существует около миллиона веб-сервисов, которые позволят вам получить эскиз с помощью cgi, или вы можете просто самостоятельно разместить такой сервис и вызвать его. Таким образом, возможно, это не обязательно должно быть на c ?

Ответ №1:

Вам необходимо отобразить веб-страницу, чтобы создать снимок. Для рендеринга страницы на C вам необходимо включить движок браузера. Вы можете сделать это легко с помощью Qt (инструментарий для c ). Это взято из документации Qt и является всем, что вам нужно для отображения веб-страницы.

 QWebView *view = new QWebView(ui->centralWidget);
view->load(QUrl("http://qt.nokia.com/"));
view->show();
  

Объект view имеет сигнал loadFinished. Вы могли бы подключить некоторый код к этому сигналу. После рендеринга страницы вы создаете снимок, как описано здесь.
Это сводится к:

 QPixmap::grabWindow(mainwindow->winId())
  

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