Tratamento de imagens

Video Creator – #Parte 8: Tratamento das imagens

Bom dia, boa tarde, boa noite!

Essa é a oitava parte da série sobre o projeto Video Creator, onde mostrarei como fiz o tratamento das imagens que serão utilizadas nos videos.

Se você entrou direto nesse post, te aconselho a começar por aqui, para entender exatamente do que se trata essa série.

Sobre essa parte

Aqui começamos a desenvolver o penúltimo robô, o rvideo.py, que será responsável por tratar as imagens e compilar o video.

Nesse post mostrarei o tratamento das imagens com uma ferramenta fantástica chamada ImageMagick.

Existe uma outra ferramenta fantástica que cheguei a testar, mas na hora acabei mantendo o ImageMagick por já estar um pouco mais familiarizado. Mas para quem quiser conhecer, segue o link da lib:

https://pypi.org/project/Pillow/

Requisitos:

Para realizar o tratamento das imagens, precisei do ImageMagick instalado, e de algumas outras libs:

import sys
sys.path.insert(0, './')
from PIL import Image
import os
import rcontent

A instrução sys.path.insert(0, './') server para que eu consiga importar para o código, arquivos de outras pastas.

ImageMagick

Para começar, precisamos instalar o ImageMagick na máquina.

No site do programa você encontra toda a documentação necessária para você fazer o que quiser, além de exemplos e os links para download do programa.

No ubuntu precisei apenas digitar:

sudo apt-get install imagemagick

Tratamento das imagens:

Para o tratamento das imagens, encapsulei todo o código dentro da função prepare_images_downloaded(). Ficou assim:


def prepare_images_downloaded():
    logging.info("Preparing images downloaded to compile the video")
    
    #os.chdir('./')
    #path = "./content/images"
    path = CONTENT_IMAGES_PATH
    # removing existing composite images
    os.system("rm -rf {}/*_composite*".format(path))
    # create directory
    video_content = rcontent.load()
        
    for root, folders, files in os.walk('./content/images'):

        for f in files:
            f_split = f.split("_")
            idx_sentence = int(f_split[0])
            filename_original = os.path.join(root, f)
            filename_composite = "{}/{}_composite.jpg".format(path, f_split[0])
            filename_resized = "{}/{}_resized.jpg".format(path, f_split[0])
            sentence = video_content['sentences'][idx_sentence]['text']
            # creating comands
            create_image_resized = "convert {} -resize '1280x720' {}".format(filename_original, filename_resized)
            create_image_composite = "convert {} -background 'white' -blur '0x9' -resize '1920x1080^' -extent 1920x1080 \( {} -bordercolor white -border 10x10 \) -compose over -gravity center -composite {}".format(filename_original, filename_resized, filename_composite)
            
            # creating images
            os.system(create_image_resized)
            os.system(create_image_composite)

            # removing resized images
            os.system("rm -rf {}/*_resized*".format(path))

            # workaround to resolve the problems with grayscale image
            img = Image.open(filename_composite)
            rgbimg = Image.new(IMAGE_FORMATTER.get(img.format, 'RGB'), img.size)
            rgbimg.paste(img)
            rgbimg.save(filename_composite, format=img.format)

A função é bem simples, mas ela faz muita coisa legal.

Primeira ela elimina da pasta de imagens todas as imagens que contenham _composite no nome.

Depois carrega o conteúdo do arquivo content.json para dentro do objeto video_content.

Depois itera nas imagens da pasta com as imagens baixadas, e converte todas elas para o tamanho de 1280 x 720px.

Após, cria uma montagem esticando a imagem principal para cobrir todo o frame e cria o efeito embaçado. Depois coloca no centro da imagem a foto redimensionada anteriormente.

O resultado é bem legal 😀

Imagem original
Imagem editada

Notem que no final da function, existe um trecho onde precisei utilizar a lib Pillow para tratar um problema de imagens em grayscale na hora de compilar o video.

Bom, agora que temos as imagens tratadas, hora de compilar o video!

Mostro como eu fiz no próximo post!

Abraço.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *