Bagaimana saya bisa mengambil tangkapan layar dari jendela, dengan margin yang dapat disesuaikan

17

Saya memerlukan alat yang akan melakukan hal berikut: memilih jendela, akan membuat tangkapan layar dari jendela itu dengan a x padding, seperti pada gambar berikut:

Jadi, dalam sebagian besar kasus x akan sama dengan y , tetapi kadang-kadang saya membutuhkan jarak yang berbeda.

Bagaimana cara membuat tangkapan layar seperti itu, secara otomatis? Saya mencoba dengan Shutter, tetapi saya tidak dapat menemukan pengaturan seperti itu di sana. Namun, ini mendukung plugin. Jadi plugin bisa memotong jendela dengan cara ini.

Ionică Bizău
sumber
Bisakah saya bertanya alat apa yang Anda gunakan untuk membuat maket itu? Ini terlihat cukup bagus :)
Seth
1
@Set InkScape aturan! Saya bukan ahli, tapi saya suka membuat hal-hal seperti ini untuk proyek saya. Terlihat bagus untuk mata. :-) Ini adalah versi PNG , dan versi SVG . Repositori ini berisi hal-hal lain yang dibuat dengan InkScape.
Ionică Bizău

Jawaban:

19

Script, menggunakan Shutter

Saya tidak berpikir itu ada, tapi seperti apa pun, itu bisa dibuat.

Jika Anda membuat skrip di bawah ini tersedia di bawah kombinasi tombol (penjelasan lebih lanjut di bawah), sebuah jendela akan muncul, memungkinkan Anda untuk mengatur margin tangkapan layar Anda di sebelah kiri, kanan, atas dan bawah , dipisahkan oleh spasi:

masukkan deskripsi gambar di sini

hasil:

masukkan deskripsi gambar di sini

atau:

masukkan deskripsi gambar di sini

hasil:

masukkan deskripsi gambar di sini

dll.

Saya menetapkan default ke 30 px, tetapi Anda dapat mengatur nilai default apa pun (lihat di bawah).

Cara Penggunaan

  • Script menggunakan Shutterdan wmctrl. Dengan asumsi Shuttersudah ada di sistem Anda (sejak Anda menyebutkannya), instal wmctrl:

    sudo apt-get install wmctrl
    

    NB Jika Anda menggunakan Kubuntu , Zenitytidak diinstal secara default:

    sudo apt-get install zenity
    
  • Salin skrip di bawah ini ke file kosong. Jika mau, Anda dapat mengubah "default 'marge di baris skrip:

    `arg =`
    
  • simpan sebagai custom_screenshot.py.

  • Tambahkan skrip ke kombinasi tombol pintas: pilih: Pengaturan Sistem> "Keyboard"> "Pintasan"> "Pintasan Khusus". Klik "+" dan tambahkan perintah:

    python3 /path/to/custom_screenshot.py
    

Catatan

Script digunakan wmctrluntuk menentukan posisi jendela. Namun pada window manager yang berbeda, output dari wmctrl -lGperintah menunjukkan perbedaan kecil pada posisi y dari window. Perbedaan-perbedaan ini dihilangkan dengan nilai, diatur dalam deviation=-line script. Nilai yang ditetapkan saat ini (0) sesuai untuk Unity dan KDE.

Skrip juga diuji, dan berfungsi dengan baik pada Xfcedan Gnome, tetapi nilainya perlu diubah kemudian, seperti yang dijelaskan di bagian kepala skrip.

Naskah

#!/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])
Yakub Vlijm
sumber
3
Saya tidak berpikir itu ada - Sekarang ada! Terima kasih banyak!
Ionică Bizău
1
@ IonicăBizău sama-sama! Terima kasih atas pertanyaannya, itu menyenangkan untuk dilakukan. Saya membuat sedikit koreksi pada penjelasan pengaturan default.
Jacob Vlijm
1
@ IonicăBizău menemukan (dan memperbaiki) bug dalam geometri.
Jacob Vlijm
2
Bagus bagus bagus! Saya menetapkannya sebagai perintah yang saya jalankan ketika saya menekan tombol khusus pada notebook ASUS saya. :-)
Ionică Bizău
2

Anda juga dapat menggunakan kombinasi tombol Shift dan PrtScr untuk mengambil screenshot dari area tertentu dengan dimensi yang ditentukan pengguna.

Cukup tekan kombinasi dan gunakan kursor yang dimodifikasi (menjadi mirip dengan tanda plus) untuk memilih area untuk tangkapan layar.

manishraj2011
sumber
Biasanya, saya tidak bisa mengontrol tangan saya untuk mengatur margin ini dengan tepat. :-) Tapi +1 untuk pintasan ini, saya tidak mengetahuinya.
Ionică Bizău
2

Anda dapat mengambil tangkapan layar dengan scrotutilitas tangkapan layar baris perintah:

scrot -s  

atau

scrot -ub -d 5  

Perintah kedua menempatkan perbatasan di sekitar jendela yang dipilih, yang memiliki lebar yang bagus dalam kaitannya dengan ukuran jendela. The -d 5pilihan singkatan keterlambatan dan memberikan penundaan 5 detik untuk memilih jendela berada di layar.

Instal dengan ini:

sudo apt-get install scrot

Referensi: Manual Ubuntu - scrot

Tim
sumber