Screenshots com PHP

Salvar screenshots de um site não é uma tarefa muito comum de um programador, porém, esta é uma tarefa interessante de ser feita. Existem algumas soluções interessantes para se resolver esta tarefa, porém, existe um cara em especial que me chamou a atenção e atendeu muito bem as minhas necessidades. Requisito para prosseguir com a solução apresentada neste post é instalar o wkhtmltoimage. Se você acessar o site do projeto vai ver que o nome dele é wkhtmltopdf e não wkhtmltoimage, como é mencionado. O wkhtmltoimage existe nos downloads do projeto, você só precisa instalar a versão adequada para o seu sistema operacional. Tem versões para Linux, Mac e Windows. Vou guiá-los com base no texto Taking screenshots of websites with PHP.

O wkhtmltoimage é um simples utilitário para ser executado via shell que faz a conversão de HTML para imagem usando o WebKit Engine e QT. Não é bem uma conversão. A ferramenta renderiza o endereço requisitado utilizando o WebKit Engine e tira um screenshot desta renderização utilizando o QT.

Fazendo sua primeira screenshot

Levando em consideração que você já tenha o wkhtmltoimage instalado corretamente, abra o seu terminal e digite:

wkhtmltoimage http://www.google.com google.jpg

O código acima vai converter toda a representação HTML do Google e vai converter isso para jpg usando o wkhtmltoimage.

Customizando a saída

O comando wkhtmltoimage tem uma série de opções:

  • Desabilitar a renderização de imagens.
  • Controlar a qualidade da imagem de output.
  • Salvar o screenshot com uma resolução específica.
  • Salvar uma região especifíca do screenshot (crop).
  • Desabilitar o javascript da pagina requisitada.

Exemplos

//renderiza sem imagens
wkhtmltoimage --no-images http://www.google.com google.jpg

//não carrega os javascripts
wkhtmltoimage --no-javascript http://www.google.com google.jpg

//reduz a qualidade da imagem de output
wkhtmltoimage --quality 50 http://www.google.com google.jpg

//personaliza a largura e a altura do screenshot
wkhtmltoimage --height 600 --width 1800 http://www.google.com google.jpg

//faz um crop de 300x300 pixels partindo do eixo x0 e y0
wkhtmltoimage --crop-h 300 --crop-w 300 --crop-x 0 --crop-y 0 http://www.google.com google.jpg

Utilizando com PHP

Como já era de se imaginar, toda esta façanha não é feita somente com PHP. Você precisa da ajuda de alguns caras e para que o PHP consiga executar estes comandos, vamos precisar da ajuda de um método chamado shell_exec do PHP. Também podemos utilizar um wrapper escrito em PHP5 que abstrai os métodos do wkhtmltoimage e wkhtmltopdf chamado Snappy escrito em PHP5 do PHP.

Método 1: shell_exec

shell_exec('./wkhtmltoimage --quality 50 http://www.google.com google.jpg');

Método 2: Snappy

<?php

namespace Knplabs\Snappy;

require_once('Knplabs/Snappy/Media.php');
require_once('Knplabs/Snappy/Image.php');

/* 'wkhtmltoimage' executable  is located in the current directory */
$snap = new Image('./wkhtmltoimage');

/* Displays the bbc.com website index page screenshot in the browser */
header("Content-Type: image/jpeg");
$snap->output('http://www.bbc.com');

?>

Com alguns métodos adicionados…

<?php

namespace Knplabs\Snappy;

require_once('Knplabs/Snappy/Media.php');
require_once('Knplabs/Snappy/Image.php');

$options = array('zoom' => 0.5, 'no-images' => true);

/* 'wkhtmltoimage' executable  is located in the current directory */
$snap = new Image('./wkhtmltoimage-i386',$options);

/* Displays the bbc.com website index page screen-shot in the browser */
header("Content-Type: image/jpeg");
$snap->output('http://www.bbc.com');

?>

É isso aí!

Qualquer dúvida, estou à disposição.

Posts Relacionados:

8 Comments

  1. jz

    Amigo… Gostaria de tirar algumas dúvidas… esse programa eu utilizo no Wamp… consigo converter normalmente… Daí estou querendo utilizá-lo na minha hospedagem… ela é compartilhada… Mas me dá acesso SSH … tentei instalar mais não consegui… daí o que seria esse snappy … para eu utilizá-lo precisa apenas colocar no servidor os arquivos e converter as imagens sem o programa instalado… ou ele apenas substitui o exec_shell ?? se puder ajudar…

  2. jz

    Tudo bom Igor … Só uma dúvida… eu enviei para uma pasta de teste o arquivo e descompactei… Lá criei um arquivo php usando shell_exec … mas quando eu executo ele não funciona… é isso mesmo… ou possui algum lugar especifico para eu descompactar o arquivo… pois em um tutorial da net mostrava que deveria mover o arquivo para a pasta \bin… mas no meu caso foi negado o acesso a esta pasta… por isto tentei inserir no diretório raíz do site… ATT JV

  3. Winston Kury

    Após a instalação, verifiquei que não foi criado o aplicativo wkhtmltoimage.exe e sim o wkhtmltopdf.exe. Consigo converter uma página para pdf mas não para jpg.

Leave a Reply

Your email address will not be published. Required fields are marked *