Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

RSS iMasters

[Resolvido] Fazendo screenshots usando wkhtmltoimage e PHP

Recommended Posts

Salvar screenshots de um site não é uma tarefa muito comum para um programador, porém é algo interessante de ser feito. Existem algumas soluções interessantes para fazê-lo. Dentre elas, uma em especial chamou a minha atenção e atendeu muito bem às minhas necessidades.

Um requisito para prosseguir com a solução apresentada neste artigo é instalar o software 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 e 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 software é 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 é exatamente uma conversão. Na verdade, a ferramenta renderiza o endereço requisitado utilizando o WebKit Engine e tira um screenshot dessa 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 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 específica 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 essa façanha não é feita somente com PHP. Para que ele consiga executar esses 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 o 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 KnplabsSnappy;

 

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 KnplabsSnappy;

 

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');

 

?>

Para qualquer informação a mais, ou qualquer dúvida, estou à disposição.

 

http://imasters.com.br/artigo/22314/php/fazendo-screenshots-usando-wkhtmltoimage-e-php

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.