Como posso escalar facilmente uma captura de tela, tirada de uma tela com alta DPI?

3

Desde que mudei para um visor de alta DPI, as capturas de tela que eu postei são desajeitadamente grandes, exemplo abaixo.

Existe uma maneira de fazê-los parecerem normais?
De preferência, algo mais rápido do que disparar o GIMP.

Em particular, existe uma opção escondida para isso no screenshot do gnome?

  • Provavelmente não existe uma ferramenta perfeita, pois a maneira de adaptar o Ubuntu ao High DPI não é uniforme (fontes, decorações de janelas, programas, podem ter escalas diferentes), mas uma boa ferramenta lê essas configurações e descobre qual é a melhor escala a usar.
  • De preferência, gostaria de manter a capacidade de selecionar apenas parte da tela (como em SHIFT + PRTSCR) e escolher o nome do arquivo.
  • Caso isso seja importante, sempre salve minhas capturas de tela em $HOME/Pictures .
por Nicolas Raoul 08.01.2016 / 08:03

2 respostas

3

1. Faça uma captura de tela como de costume e, em seguida, dimensione automaticamente a última tela que você tirou com uma tecla de atalho.

Colocado sob uma tecla de atalho, o script abaixo irá:

  1. Encontre a última tela adicionada no seu diretório de captura de tela (que é ~/Picures , como você mencionou em um comentário)
  2. Redimensione a imagem em uma porcentagem arbitrária
  3. Renomeie e salve a imagem como renamed_filename.png , em que filename.png é o nome do arquivo original.

Como usar

  1. O script precisa da biblioteca python3-pil a ser instalada, o que pode não ser o caso em seu sistema:

    sudo apt-get install python3-pil
    
  2. Copie o script abaixo em um arquivo vazio, salve-o como resize_screenshot.py

  3. Teste - execute o script fazendo uma captura de tela e, em seguida, execute o script pelo comando:

    python3 /path/to/resize_screenshot.py 80
    

    em que 80 é a porcentagem de tamanho de saída desejada. O script agora criou a cópia redimensionada da última captura de tela.

  4. Se tudo funcionar bem, adicione-o a uma tecla de atalho: Configurações do sistema > Teclado > Atalhos > Atalhos Personalizados. Adicione o comando:

    python3 /path/to/resize_screenshot.py 80
    

O script

#!/usr/bin/env python3
import os
import sys
from PIL import Image

percent = float(sys.argv[1])/100


pic_list = []
# list all .png files in ~/Pictures
pic_dir = os.environ["HOME"]+"/Pictures"
files = [pic_dir+"/"+f for f in os.listdir(pic_dir) if \
         all([f.endswith(".png"), not f.startswith("resized")])]
# create a sorted list + the creation date of relevant files
pics = [[f, int(os.stat(f).st_ctime)] for f in files]
pics.sort(key=lambda x: x[1])
# choose the latest one
resize = pics[-1][0]
# open the image, look up its current size
im = Image.open(resize)
size = im.size
# define the new size; current size * the percentage
newsize = [int(n * percent) for n in size]
# resize the image, save it as renamed file (keeping original)
im.thumbnail(newsize, Image.ANTIALIAS)
newfile = pic_dir+"/resized_"+resize.split("/")[-1]
im.save(newfile, "png")

Um exemplo

Um exemplo da sua imagem, redimensionada por:

python3 <script> 80

2.Opçãototalmenteautomática

Enquantooscriptacimafazseutrabalhoemumatecladeatalho,vocêpodetorná-lototalmenteautomáticocomumscriptdeplanodefundo.Tudooqueoscriptthyefazéverificarosarquivosnovosem~/Picureseexecutaraaçãoderedimensionamentocomonoprimeiroscript.

Oscript

#!/usr/bin/env python3 import os import sys from PIL import Image import time percent = float(sys.argv[1])/100 pic_dir = os.environ["HOME"]+"/Pictures" def pics_list(dr): return [pic_dir+"/"+f for f in os.listdir(pic_dir) if \ all([f.endswith(".png"), not f.startswith("resized")])] def scale(f): #open the image, look up its current size im = Image.open(f) size = im.size # define the new size; current size * the percentage newsize = [int(n * percent) for n in size] # resize the image, save it as renamed file (keeping original) im.thumbnail(newsize, Image.ANTIALIAS) newfile = pic_dir+"/resized_"+f.split("/")[-1] im.save(newfile, "png") p_list1 = pics_list(pic_dir) while True: time.sleep(2) p_list2 = pics_list(pic_dir) for item in p_list2: if not item in p_list1: scale(item) p_list1 = p_list2

Como usar

A configuração é exatamente como o script acima (" Como usar "), mas em vez de [4.] , adicione-o a Startup Applications: Dash > Aplicativos de inicialização > Adicionar. Adicione o comando:

python3 /path/to/resize_screenshot.py 80

3. Opção totalmente automática com um diálogo de escala

Praticamente o mesmo script, mas agora com um diálogo de escala, imediatamente após você salvou a imagem em ~/Pictures :

Estaimagemfoiautomaticamenteredimensionadapara80%:)

Oscript

#!/usr/bin/env python3 import os import sys from PIL import Image import time import subprocess # --- change if you like the default scale percentage, as proposed by the slider: default_percent = 80 # --- change if you like the screenshot directory pic_dir = os.environ["HOME"]+"/Pictures" # --- def pics_list(dr): return [pic_dir+"/"+f for f in os.listdir(pic_dir) if \ all([f.endswith(".png"), not f.startswith("resized")])] def scale(f, size): #open the image, look up its current size im = Image.open(f) currsize = im.size # define the new size; current size * the percentage newsize = [int(n * size) for n in currsize] # resize the image, save it as renamed file (keeping original) im.thumbnail(newsize, Image.ANTIALIAS) newfile = pic_dir+"/resized_"+f.split("/")[-1] im.save(newfile, "png") p_list1 = pics_list(pic_dir) while True: time.sleep(2) p_list2 = pics_list(pic_dir) for item in p_list2: if not item in p_list1: try: size = subprocess.check_output([ "zenity", "--scale", "--value="+str(default_percent), ]).decode("utf-8") scale(item, float(size)/100) except subprocess.CalledProcessError: pass p_list1 = p_list2

Para usar

A configuração é exatamente como acima, exceto o comando, agora sem porcentagem de escala:

python3 /path/to/resize_screenshot.py

Nota

Como sempre, o script de segundo plano praticamente não usa recursos, a menos que o diretório ~/Pictures seja insanamente grande:).

    
por Jacob Vlijm 08.01.2016 / 13:15
1

Com gnome-screenshot não podemos escalar a saída.

Para fazer isso automaticamente, podemos atribuir outro aplicativo do terminal de captura de tela para um atalho.

Exemplos de capturas de tela com tamanho de 50%:

  1. Magia de imagens import -resize to percent of original

    • tire screenshot de toda a área de trabalho:

      import -window root -resize 50% [-delay <value>] shot.png
      
    • tire screenshot de uma janela (selecionável por mouse):

      import -window $(xdotool selectwindow) resize 50% shot.png
      
    • tire uma foto de uma janela e exiba o resultado:

      import -window $(xdotool selectwindow) -resize 50% shot.png && display shot.png
      
    • carregue a captura de tela para qualquer outro visualizador externo (por exemplo, eog )

      import -window $(xdotool selectwindow) -resize 50% shot.png && eog shot.png
      
  2. scrot (manpage) saída para Image Magic convert para selecionar uma área de tela

    scrot <options> -e "convert \$f -resize 50% shot.png && rm \$f"
    <options>
    -s select window or rectangle with mouse
    -u use currently focused windows
    

    Abaixo, o exemplo será exibido, em seguida, salve uma captura de tela com metade do tamanho (50%) de uma área ou janela selecionada usando o nome de arquivo padrão do scrot (data / hora / minuto / segundo / tamanho):

    scrot -s -e "convert \$f -resize 50% ~/Pictures/\$f && display \$f && rm \$f"
    
por Takkat 08.01.2016 / 09:34