2014-05-23 14 views

Odpowiedz

3

Myślę, że this jest tym, czego szukasz. Znalazłem go na Githubie.

screenshot.pl - zrzut ekranu

zapisać stronę jako SVG:

screenshot.pl --type svg http://www.google.com/ 

zapisać stronę jako PDF:

screenshot.pl --output cpan.pdf http://search.cpan.org/ 

zapisać element strona pobrana z zapytania XPath jako PNG:

screenshot.pl --output ba.png --xpath 'id("content")' http://bratislava.pm.org/ 
+0

używa GTK3, a nie GTk2. Nie mogę zainstalować Gtk3 na CentOS 6.5 – Julien

+0

Dlaczego nie na 6.5? Sprawdź to: http://linuxfonts.narod.ru/compiling-and-installing-gtk3-in-centos6.html –

1

Oto moja GTK2 rozwiązanie tego problemu:

#!/usr/bin/perl 
use Gtk2 -init; 
use Gtk2::WebKit; 
use Data::Dumper; 

my $window = Gtk2::Window->new; 
my $sw  = Gtk2::ScrolledWindow->new; 
my $view = Gtk2::WebKit::WebView->new; 
my $factor = 0; 

$window->set_default_size(Gtk2::Gdk->screen_width, Gtk2::Gdk->screen_height); 
$window->set_border_width(1); 
$sw->add($view); 
$window->add($sw); 

$window ->signal_connect('destroy' => \&delete_event); 
$view->signal_connect('load-finished' => \&prepare_zoom); 

$view->set_full_content_zoom(TRUE); 
$view->signal_connect('size-allocate' => \&screenshot); 
$view->open('http://stackoverflow.com/questions'); 

$window->show_all; 
Gtk2->main; 


##################################### 
sub delete_event { 
    Gtk2->main_quit; 
    return FALSE; 
} 
##################################### 

sub prepare_zoom { 
    $adj = $sw->get_vadjustment(); 
    $factor = $adj->page_size/$adj->upper; 
    $view->set_zoom_level($factor); 
} 

sub screenshot { 
    return unless defined($window->window) && $factor>0; 
    my ($width, $height) = $window->window->get_size; 
    my $sWidth=$width*$factor; 

    my $gdkpixbuf = Gtk2::Gdk::Pixbuf->new ('rgb', 0, 8, $width, $height); 
    $gdkpixbuf->get_from_drawable($window->window, 
      undef, 0, 0, 0, 0, $width, $height); 

    $gdkpixbuf->save ("screenshot.jpg", 'jpeg', quality => 100); 
     #Gtk2->main_quit; 
    return FALSE; 
} 

Ten kod działa, ale nie jestem GTK2/Webkit ekspertem, więc jestem pewien, że to może być napisany w sposób lepszy sposób.

Ideą tego jest prosty:

  1. załadować stronę
  2. Pobierz pełny rozmiar strony i widoczny rozmiar strony, a następnie obliczyć współczynnik skali, aby zobaczyć pełną zawartość strony
  3. dopasowuje strony wykorzystujące ten współczynnik skali
  4. chwycić screenshot

UWAGI

  • Zależy gdzie chcesz go zastosować, obliczenie współczynnika skalowania mogą wymagać pewnych korekt
  • Można przyciąć zrzut ekranu (aby usunąć puste obszary) doprowadzenie wartości przekazywane do get_from_drawable.
+0

Sprytna sztuczka, ale nie mogę jej użyć, ponieważ potrzebuję obrazu w oryginalnym rozmiarze. – Julien

+0

Możesz użyć xvfb (http://en.wikipedia.org/wiki/Xvfb), aby to zrobić. Zasadniczo obliczyć wymiary docelowej sieci, wywołać xvfb z takimi wymiarami i załadować stronę w nim. –

Powiązane problemy