Como posso tirar uma captura de tela de uma janela, com margens personalizáveis

17

Eu preciso de uma ferramenta que faça o seguinte: selecionando uma janela, fará uma captura de tela dessa janela com um preenchimento x , como na imagem a seguir:

Assim, na maioria dos casos, x será igual a y , mas às vezes eu preciso de distâncias diferentes.

Como criar uma captura de tela automaticamente? Eu tentei com o Shutter, mas não consegui encontrar um ambiente assim. No entanto, suporta plugins. Então, um plugin poderia ser cortar a janela dessa maneira.

    
por Ionică Bizău 28.01.2015 / 09:03

3 respostas

19

Script, usando o Obturador

Eu não acho que exista, mas como qualquer coisa, pode ser feito.

Se você disponibilizar o script abaixo em uma combinação de teclas (explicação mais abaixo), uma janela será exibida, permitindo que você defina as margens da captura de tela na esquerda, direita, superior e bottom , separados por um espaço:

resultado:

ou:

resultado:

etc.

Eu defino o padrão para 30 px, mas você pode definir qualquer valor padrão (veja abaixo).

Como usar

  • O script usa Shutter e wmctrl . Assumindo que Shutter já está em seu sistema (desde que você mencionou), instale wmctrl :

    sudo apt-get install wmctrl
    

    N.B. Se você usar o Kubuntu , Zenity não será instalado por padrão:

    sudo apt-get install zenity
    
  • Copie o script abaixo em um arquivo vazio. Se você quiser, pode alterar a margem "padrão" na linha do script:

    'arg ='
    
  • salve-o como custom_screenshot.py .

  • Adicione o script a uma combinação de atalhos: escolha: Configurações do sistema > "Teclado" > "Atalhos" > "Atalhos personalizados". Clique no botão "+" e adicione o comando:

    python3 /path/to/custom_screenshot.py
    

Nota

O script usa wmctrl para determinar a posição da janela. Em diferentes gerenciadores de janelas, no entanto, a saída do comando wmctrl -lG mostra pequenas diferenças na posição y da janela. Essas diferenças são eliminadas pelo valor definido na deviation= -line do script. O valor atualmente definido (0) é apropriado para o Unity e o KDE.

O script também é testado e funciona bem em Xfce e Gnome , mas o valor precisa ser alterado, conforme explicado na seção principal do script.

O script

#!/usr/bin/env python3
import subprocess
import time

"""
On different window managers, the window geometry as output of wmctrl differs slightly.
The "deviation" should compensate these differences. Most likely appropriate (tested) settings:
Unity: 0, Gnome: -36, Xfce (Xubuntu): -26, KDE (Kubuntu): 0
"""
#---
deviation = 0
#---
get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
try:
    arg = get('zenity --entry --entry-text "30 30 30 30" --text "border left, right, top, bottom" --title "Screenshot margins"').strip().split()
except:
    pass
else:
    time.sleep(0.5)
    # frontmost window pos
    frontmost = [l.split()[4] for l in get("xprop -root").splitlines() if "ACTIVE_WINDOW(WINDOW)" in l][0].replace(",", "")
    frontmost = frontmost[:2]+"0"+frontmost[2:]
    f_data = [l.split() for l in get("wmctrl -lG").splitlines() if frontmost in l][0][2:6]
    # extent
    xt_data = get("xprop -id "+frontmost).split()
    xt_i = xt_data.index("_NET_FRAME_EXTENTS(CARDINAL)")
    xt = [int(n.replace(",", "")) for n in xt_data[xt_i+2:xt_i+6]]
    # set data for screenshot command
    x = str(int(f_data[0])-int(arg[0])-xt[0])
    y = str(int(f_data[1])-int(arg[2])-xt[2]+deviation)
    w = str(int(f_data[2])+int(arg[0])+int(arg[1])+xt[0]+xt[1])
    h = str(int(f_data[3])+int(arg[3])+int(arg[2])+xt[2]+xt[3])

    command = "shutter -s="+(",").join([x,y,w,h])+" -e"
    subprocess.call(["/bin/bash", "-c", command])
    
por Jacob Vlijm 28.01.2015 / 11:43
2

Você também pode usar a combinação de botões Shift e PrtScr para fazer a captura de tela de uma área específica com dimensões definidas pelo usuário.

Basta pressionar a combinação e usar o cursor modificado (ele se torna semelhante a um sinal de mais) para escolher a área para a captura de tela.

    
por manishraj2011 03.02.2015 / 15:35
2

Você pode tirar screenshots com o utilitário de captura de tela da linha de comando scrot :

scrot -s  

ou

scrot -ub -d 5  

O segundo comando coloca uma borda ao redor da janela selecionada, que tem uma boa largura em relação ao tamanho da janela. A opção -d 5 significa atraso e dá um atraso de 5 segundos para selecionar a janela a ser exibida na captura de tela.

Instale com isto:

sudo apt-get install scrot

Referência: Manual do Ubuntu - scrot

    
por Uroš Jarc 31.01.2015 / 14:54