Özelleştirilebilir kenar boşluklarıyla bir pencereden ekran görüntüsü nasıl alabilirim


17

Aşağıdakileri yapacak bir araca ihtiyacım var: bir pencere seçmek , aşağıdaki resimde olduğu gibi, bir x dolgu ile bu pencerenin ekran görüntüsünü yapacak :

Yani, çoğu durumda x , y ile eşit olacaktır , ancak bazen farklı mesafelere ihtiyacım var.

Otomatik olarak böyle bir ekran görüntüsü nasıl yapılır? Shutter ile denedim ama orada böyle bir ayar bulamadım. Ancak, eklentileri destekler. Yani bir eklenti pencereyi bu şekilde kırpmak olabilir.


Bu maketi oluşturmak için hangi aracı kullandığınızı sorabilir miyim? Oldukça hoş görünüyor :)
Seth

1
@Seth InkScape kuralları! Uzman değilim, ama projelerim için böyle şeyler yaratmayı seviyorum. Gözler için iyi görünüyor. :-) İşte PNG sürümü ve SVG sürümü . Bu havuz InkScape ile oluşturulmuş başka şeyler içeriyor.
Ionică Bizău

Yanıtlar:


19

Deklanşör kullanan komut dosyası

Var olduğunu düşünmüyorum, ama her şey gibi yapılabilir.

Aşağıdaki komut dosyasını bir tuş birleşimi altında kullanılabilir hale getirirseniz (aşağıda daha fazla açıklama), ekran görüntünüzün kenar boşluklarını sol, sağ, üst ve altta boşluklarla ayırarak ayarlamanıza izin veren bir pencere açılır :

resim açıklamasını buraya girin

sonuç:

resim açıklamasını buraya girin

veya:

resim açıklamasını buraya girin

sonuç:

resim açıklamasını buraya girin

vb.

Varsayılanı 30 piksel olarak ayarladım, ancak herhangi bir varsayılan değeri ayarlayabilirsiniz (aşağıya bakın).

Nasıl kullanılır

  • Komut dosyası Shutterve kullanır wmctrl. Varsayarsak Shutter, yüklemek (eğer söz beri) sisteminizde zaten edilir wmctrl:

    sudo apt-get install wmctrl
    

    Not Kubuntu kullanıyorsanız , Zenityvarsayılan olarak yüklenmez:

    sudo apt-get install zenity
    
  • Aşağıdaki komut dosyasını boş bir dosyaya kopyalayın. İsterseniz komut dosyasının satırındaki "varsayılan" kenar boşluğunu değiştirebilirsiniz:

    `arg =`
    
  • olarak kaydedin custom_screenshot.py.

  • Komut dosyasını bir tuş kısayol kombinasyonuna ekleyin: şunu seçin: Sistem Ayarları> "Klavye"> "Kısayollar"> "Özel Kısayollar". "+" İşaretini tıklayın ve şu komutu ekleyin:

    python3 /path/to/custom_screenshot.py
    

Not

Komut dosyası wmctrl, pencerenin konumunu belirlemek için kullanır . Ancak farklı pencere yöneticilerinde, wmctrl -lGkomutun çıktısı pencerenin y konumunda küçük farklılıklar gösterir. Bu farklılıklar deviation=, komut dosyasının-satırında ayarlanan değerle ortadan kaldırılır . O anda ayarlanan değer (0) Unity ve KDE için uygundur.

Komut dosyası da test edilir ve üzerinde iyi çalışır Xfceve Gnomeancak komut dosyasının baş bölümünde açıklandığı gibi değerin değiştirilmesi gerekir.

Senaryo

#!/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])

3
Var olduğunu düşünmüyorum - Şimdi var! Çok teşekkür ederim!
Ionică Bizău

1
@ IonicăBizău rica ederim! Soru için teşekkürler, yapmak eğlenceliydi. Varsayılan ayar açıklamasında küçük bir düzeltme yaptım.
Jacob Vlijm

1
@ IonicăBizău geometride bir hata buldu (ve düzeltti).
Jacob Vlijm

2
Güzel güzel güzel! ASUS dizüstü bilgisayarımdaki özel düğmeye bastığımda komando olarak ayarladım. :-)
Ionică Bizău

2

Ayrıca , kullanıcı tanımlı boyutlara sahip belirli bir alanın ekran görüntüsünü almak için Shift ve PrtScr düğmelerinin birleşimini de kullanabilirsiniz .

Sadece kombinasyona basın ve ekran görüntüsü alanını seçmek için değiştirilmiş imleci kullanın (artı işaretine benzer hale gelir).


Genellikle, bu kenar boşluklarını tam olarak ayarlamak için ellerimi kontrol edemiyorum. :-) Ama bu kısayol için +1, bilmiyordum.
Ionică Bizău

2

scrotKomut satırı ekran yakalama yardımcı programı ile ekran görüntüsü alabilirsiniz :

scrot -s  

veya

scrot -ub -d 5  

İkinci komut, seçilen pencerenin çevresine, pencerenin boyutuna göre hoş bir genişliği olan bir kenarlık yerleştirir. Bu -d 5seçenek gecikme anlamına gelir ve ekran görüntüsünde bulunacak pencereyi seçmek için 5 saniyelik bir gecikme sağlar.

Bununla yükleyin:

sudo apt-get install scrot

Referans: Ubuntu Kılavuzu - scrot

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.