DEV Community

Cover image for Vamos converter um texto em escrita à mão?
Thais Ribeiro
Thais Ribeiro

Posted on

Vamos converter um texto em escrita à mão?

Olá pessoas incríveis da internet, se você, assim como eu já passou por situações em que precisava assinar um documento online, enviar uma assinatura, escrever uma carta para o sindicato ou fazer uma tarefa de escola que o professor exige que seja feita à mão, hoje é seu dia de aprender a fazer o computador te ajudar (ou não).

O que vamos precisar?

Primeiro, vamos criar nosso modelo, queremos que seja com nossa caligrafia, então o que eu fiz e acho que vocês podem fazer de uma forma melhor? Escrevi em um papel branco todas as letras correspondentes a tabela Ascii:

Image description

Desde já peço desculpa pela péssima foto que dificultou um pouco, então sugiro que vocês façam em um papel em branco e melhore a qualidade da imagem. Agora vamos cortar/tirar print de cada carácter, renomear com seu respectivo código da tabela Ascii e salvar em uma pasta dentro do seu projeto.

Image description

Com nosso modelo pronto, chegou a hora de programarmos o script, que é muito simples,vamos usar a biblioteca PIL, que é uma biblioteca de código aberto do python que nos dá suporte para abrir, manipular e salvar alguns formatos de arquivos de imagens e também usaremos a biblioteca unicode, para removermos acentos do nosso texto de entrada.

pip install unidecode

from PIL import Image
from unidecode import unidecode
Enter fullscreen mode Exit fullscreen mode

Vamos pensar em uma página, na verdade vamos usar uma página em branco onde vamos gravar nosso texto (mas podem usar a que quiserem) em forma de imagem, pensando em questão de altura e largura da mesma, temos os eixos x e y, devido a isso, vamos iniciar esses eixos nas posições 0.

input_text = open('text.txt').read()

# caminho da imagem onde vamos escrever nosso texto
background = Image.open('hand_fonts/page.png')
x, y = 0, 0
Enter fullscreen mode Exit fullscreen mode

Feito isso, vamos percorrer cada caractere do nosso texto de entrada. A função ord produz o número correspondente ao ascii do item iterado e é ai que a mágica acontece, vamos associar esse número com a imagem correspondente da nossa fonte que salvamos na pasta hand_fonts.
Para finalizarmos, aplicamos algumas regras finais onde verificamos se a largura da linha não está excedendo a largura da página, e se não há quebra de linha, se sim, acrescentamos ao eixo y 140px, que pode variar dependendo da sua necessidade e do tamanho da imagem escolhida.

for text in unidecode(input_text):
    # verifica se tem quebra de linha e atualiza o eixo y, 
    # acrescentando 140px para a proxima linha
    if ord(text) == 10:
      print('Entrou?')
      x = 0
      y += 140
      continue

    # vamos usar a função ord que irá reproduzir
    # o respectivo código Ascii do nosso item e converter em string
    ascii_current = str(ord(text))
    try:
      font = Image.open(f'hand_fonts/{ascii_current}.png')
    except: 
      continue

    # atualiza a pagina em branco que escolhemos
    background.paste(font, (x, y))

    x += font.width

    # verificamos se a largura da linha está excedendo a largura da página, se sim, 
    # vamos para a próxima linha adicionando 140 px na variável y
    if background.width < x or len(text) * 115 > (background.width - x):
        x = 0
        y += 140

background.show()

Enter fullscreen mode Exit fullscreen mode

E por hoje é só, gostou? Compartilha com seus amigos e me siga no twitter que sempre trago assuntos relevantes para lá.

Obrigada, e até a próxima!

Repositório

Latest comments (6)

Collapse
 
henriqml profile image
𝖈𝖆𝖟𝖊𝖓𝖗𝖎𝖖𝖚𝖊

muito bom

Collapse
 
hannahfreitas profile image
Hannah Freitas

Maravilhosa, criei até uma conta pra te acompanhar, esperando a cena dos próximos capítulos, obrigada pelas informações 🥰

Collapse
 
clenio77 profile image
clenio afonso de oliveira moura

Ficou muito top, estou aguardando a 2ª parte e ja imaginando a usabilidade disso.

Collapse
 
raphaelncampos profile image
Raphael Campos

Muito bom! Uma coisa que você pode fazer é gerar outras bases da fonte para adicionar variação e ficar mais fidedigno

Collapse
 
thaisplicando profile image
Thais Ribeiro

Sim, tem oportunidade de melhorar em uma segunda parte! Obrigada pelo feedback Raphael.