Neste tópico vou explicar como criar uma imagem do tipo mosaico (imagem com muitas fotografias lado-a-lado) de forma totalmente automática. O utilizador apenas precisa de ter uma pasta de fotografias, o resto é tudo automático.
Para realizar este procedimento, iremos usar 100% o terminal do Ubuntu. Não se preocupe que mesmo não sabendo utilizar o terminal, todos os procedimentos serão explicados. Entretanto a ideia deste tópico provém do facto de hoje o tópico de partilha de desktops ter chegado às 400.000 visitas, um valor a comemorar, claro!
1. Pasta de fotografias/imagens
Para começar, você precisa de ter, como é óbvio, um conjunto de fotografias que você vai querer juntar para fazer o referido mosaico.
Se você não se sente à vontade com o terminal, recomenda-se vivamente que faça uma cópia de segurança da pasta que contém as fotografias e trabalho nessa nova pasta para que se se algo correr mal, você não perca nada.
No meu caso, para exemplificar a 100%, eu copiei a minha pasta de fotografias para a minha Pasta Pessoal, e renomeei a pasta para o nome "fotografias".
2. Abra o terminal e abra a pasta das fotografias
Agora que já temos a pasta com os conteúdos a trabalhar, vamos abrir o terminal e começar a produzir o mosaico. No meu caso eu gosto muito de usar o terminal chamado Guake. Se você quiser tê-lo veja este artigo:
Depois de abrir o terminal, navegue para dentro da pasta que contém as fotografias. Para se navegar entre pastas, utiliza-se o comando "cd" (sem aspas) precedido do caminho. No meu caso, como a pasta "fotografias" está logo na Pasta Pessoal, eu apenas precisei de digitar o seguinte:
3. Ponha as fotografias todas homogéneas
Pode não ser o seu caso, mas no meu caso as imagens como eram printscreens tinham diferentes resoluções e diferentes rácios (proporções). Para além disso, as imagens tinham diferentes formatos. Algumas era PNG outras JPG.
Uma vez que o mosaico deve ter as imagens todas com as mesmas proporções (caso contrário ficam com espaços vazios entre elas), então eu executei um comando, utilizando o mogrify, que basicamente converte todas os ficheiros que encontrar em ficheiros JPG (para ocuparem menos espaço no disco) e com um tamanho pequeno de 150pixeis por 100 pixeis. Aqui o tamanho é consigo. Eu preferi este tamanho pois como são muitas imagens não fazia muito sentido ter imagens muito grandes no mosaico. Se preferir outro valor, obviamente altere! Ainda sobre o referido comando, ele envia as imagens geradas para uma pasta chamada "miniaturas".
Como você não tem essa pasta chamada miniaturas, vamos criar uma com o seguinte comando do terminal:
Agora que tem esta pasta, pode já executar o comando que irá transformar todas as imagens da sua pasta fotografias em imagens com formato JPG e com tamanho 150x100 pixeis (o ponto de exclamação obriga a ter um tamanho exatamente com aqueles valores, descartando portanto o rácio original):
Consoante o tamanho das imagens e a quantidade delas, esta execução poderá demorar algum tempo. Você poderá acompanhar essa execução navegando para dentro da pasta "miniaturas":
4. Torne a ordenação das imagens aleatória (opcional)
Provavelmente existe formas bem mais fáceis de desordenar as imagens, no entanto, eu não quis procurar uma maneira genial e fiz uma maneira simples e eficaz: renomeei as imagens todas geradas na secção anterior, com nomes que são números aleatórios.
O algoritmo se calhar é um pouco pesado, mas é eficaz. Deve-se apenas ter em conta que renomear ficheiros pelo terminal, se se acontecer de ter o mesmo nome ele substitui o ficheiro e esquece o antigo. Para prevenir isso mesmo, poderia usar a flag -i que pergunta se quero realmente renomear ou não quando aparecer um nome igual. No entanto, preferi fazer algo ainda mais fácil: pôr o número antes do nome que cria a tal aleatoriedade.
Assim, para começar naveguei para dentro da pasta "miniaturas":
E depois executei este comando que irá gerar um número aleatório para cada ficheiro de imagem que será então o nome dessa imagem:
5. Como criar um mosaico de imagens
Agora que temos tudo preparado, já podemos fazer o mosaico que irá pôr todas as imagens lado a lado. Para tal, vamos a utilizar o comando montage, com a flag -tile que, conforme o valor que lhe passamos, gera uma imagem com os vários inputs que recebe lado-a-lado.
Assim, resumidamente o comando é o seguinte (o * faz usar todas as imagens que você tem na pasta que está atualmente como input: o x30 significa 30 linhas horizontais de fotografias):
O resultado do comando está apresentado na imagem abaixo. Se reparar existe espaços em branco entre as fotografias. Isso não é bonito, pelo menos para criar um mosaico clássico.
Para resolver o problema destes espaços em branco entre as imagens, define-se o tamanho que cada imagem tem. Como você anterior viu, eu tinha posto as miniaturas todas com um tamanho de 150x100. Então, basicamente diz-se que é esse tamanho:
Por fim, eu queria a imagem mais horizontal do que como ficou. Para tal, diminui a quantidade de linhas horizontais, utilizando este comando:
Resultado está apresentado nesta imagem:
Dúvidas?
Há alguns aspetos que para quem é iniciante pode ter algumas dúvidas. Portanto se você tiver dúvidas sobre algum passo, não hesite em questionar!