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

17

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

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

Como fazer essa captura de tela automaticamente? Eu tentei com o obturador, mas não consegui encontrar essa configuração lá. No entanto, ele suporta plugins. Portanto, um plugin pode ser o de cortar a janela dessa maneira.

Ionică Bizău
fonte
Posso perguntar qual ferramenta você usou para criar essa maquete? Parece bastante agradável :)
Seth
1
Regras do @Seth InkScape! Não sou especialista, mas gosto de criar coisas assim para meus projetos. Parece bom para os olhos. :-) Aqui está a versão PNG e a versão SVG . Este repositório contém outros itens criados com o InkScape.
Bizonic

Respostas:

19

Script, usando o Obturador

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 à esquerda, direita, superior e inferior , separadas por um espaço:

insira a descrição da imagem aqui

resultado:

insira a descrição da imagem aqui

ou:

insira a descrição da imagem aqui

resultado:

insira a descrição da imagem aqui

etc.

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

Como usar

  • O script usa Shuttere wmctrl. Supondo que Shutterjá esteja no seu sistema (desde que você o mencionou), instale wmctrl:

    sudo apt-get install wmctrl
    

    NB Se você usa o Kubuntu , Zenitynão está instalado por padrão:

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

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

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

    python3 /path/to/custom_screenshot.py
    

Nota

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

O script também é testado e funciona bem no Xfcee Gnome, mas o valor precisa ser mudado, então, como 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])
Jacob Vlijm
fonte
3
Eu não acho que existe - agora existe! Muito obrigado!
Jonic Biz
1
@ IonicăBizău, de nada! Obrigado pela pergunta, foi divertido de fazer. Fiz uma pequena correção na explicação da configuração padrão.
Jacob Vlijm 28/01
1
O @ IonicăBizău encontrou (e corrigiu) um erro na geometria.
Jacob Vlijm
2
Bom Bom bom! Defino como o comando que executo quando pressiono o botão especial no meu notebook ASUS. :-)
Jonas Biz
2

Você também pode usar a combinação dos botões Shift e PrtScr para capturar a 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 captura de tela.

manishraj2011
fonte
Normalmente, não consigo controlar minhas mãos para definir exatamente essas margens. :-) Mas +1 para esse atalho, eu não sabia.
Bizonic
2

Você pode capturar capturas de tela com o scrotutilitário de captura de tela da linha de comando:

scrot -s  

ou

scrot -ub -d 5  

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

Instale com isso:

sudo apt-get install scrot

Referência: Manual do Ubuntu - scrot

Tim
fonte