ganadist

Untitled

Jan 26th, 2012
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import sys
  2. import cairo, gi
  3.  
  4. USE_GTK2 = True
  5.  
  6. if USE_GTK2:
  7.     gi.require_version('Gtk', '2.0')
  8.     gi.require_version('Gdk', '2.0')
  9.     gi.require_version('WebKit', '1.0')
  10. from gi.repository import Gtk, Gdk, WebKit
  11.  
  12. DEFAULT_SIZE = 800, 480
  13.  
  14. if len(sys.argv) != 3:
  15.     print 'usage: %s url filename'%sys.argv[0]
  16.     sys.exit(-1)
  17.  
  18. uri, filename = sys.argv[1:]
  19.  
  20. for scheme in ('http://', 'https://', 'ftp://', 'file://'):
  21.     if uri.startswith(scheme):
  22.         break
  23. else:
  24.     uri = 'http://' + uri
  25.  
  26. window = Gtk.OffscreenWindow()
  27. view = WebKit.WebView()
  28. settings = view.get_settings()
  29. settings.props.auto_resize_window = True
  30. settings.props.enable_plugins = False
  31. view.set_settings(settings)
  32. window.add(view)
  33.  
  34. def capture_window(window):
  35.     w, h = window.get_size()
  36.     if w < 50 or h < 50:
  37.         # window is too small.
  38.         # resize window and reload
  39.         window.set_default_size(*DEFAULT_SIZE)
  40.         view.reload()
  41.         return
  42.  
  43.     dst = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h)
  44.     ctx = cairo.Context(dst)
  45.     surface = Gdk.cairo_create(window.get_window()).get_target()
  46.     ctx.set_source_surface(surface)
  47.     ctx.paint()
  48.     dst.write_to_png(filename)
  49.     Gtk.main_quit()
  50.  
  51. def load_cb(webview, pspec, window):
  52.     if webview.get_load_status() == WebKit.LoadStatus.FINISHED:
  53.         capture_window(window)
  54.  
  55. view.connect('notify::load-status', load_cb, window)
  56. view.load_uri(uri)
  57. window.show_all()
  58.  
  59. Gtk.main()
Advertisement
Add Comment
Please, Sign In to add comment