Salvando imagens copiadas automaticamente

Eu sempre escolho uma pessoa preguiçosa pra fazer um trabalho difícil, porque o preguiçoso vai encontrar um jeito fácil de fazê-lo.
- Bill Gates

Recentemente tive que fazer um trabalho que involve tirar muitos printscreens e salvá-los num mesmo diretório. A ferramenta de printscreen do Windows mudou recentemente no meu computador, foi atualizada pra um programa chamado "Snip and Sketch".

Agora, depois de apertar a tecla PrintScreen e selecionar a área desejada, a imagem é copiada pro clipboard (área de memória do Ctrl + C/Ctrl + V), mas pra salvar num arquivo tenho que clicar na janelinha que aparece, clicar em salvar e depois escolher o nome do arquivo que quero:

Pra um número grande de printscreens, essa interrupção constante é uma distração que realmente atrapalha. Automatizar trabalhos manuais é parte da essência da programação; por que não fazer isso, então?

Com uma breve pesquisa, encontrei um jeito de salvar imagens copiadas do clipboard:

from PIL import ImageGrab

im = ImageGrab.grabclipboard()
im.save(f'imagem.png','PNG')

Com um loop simples e um sistema de contagem, pra escrevermos em arquivos separados, conseguimos salvar automaticamente e sem interação todas as imagens copiadas (e portanto todos os prints tirados):

from PIL import ImageGrab
import time

count = 0
prev_im = None
while True:
    im = ImageGrab.grabclipboard()
    if im is not None and im.tobytes() != prev_im:
        # A comparação (pra não salvarmos a mesma imagem várias vezes)
        # tem que ser feita pelos bytes, não pelo objeto de imagem em si
        # porque ele é sobrescrevido no grabclipboard e muda
        prev_im = im.tobytes()
        im.save(f'{count:03d}.png','PNG')
        print(f'Salvando {count:03d}.png')
        count += 1
    time.sleep(1)

E assim, em 15 linhas de código poupamos algum tempo!

Show Comments

Get the latest posts delivered right to your inbox.