Bem-vindo: Sex, 18 de Outubro 2019, 8:10 Pesquisa avançada

Como criar um mosaico de fotografias de uma pasta

Escreveu alguma aplicação ou script que quer partilhar? Ou conhece algo que quer partilhar? Sabe alguma linguagem de programação e quer partilhar esse conhecimento com um tutorial? Tem alguma dúvida em alguma linguagem? Então este é o sítio certo.

Como criar um mosaico de fotografias de uma pasta

Mensagempor Claudio Novais » Sáb, 2 de Março 2013, 19:29


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:
cd fotografias



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:
mkdir miniaturas


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):
mogrify -format jpg -path miniaturas/ -resize '150x100!' *

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":
cd 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:
for i in *; do mv $i $(( $RANDOM % 1000000000 ))_$i.jpg; done



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):
montage * -tile x30 ~/mosaico.jpg

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:
montage * -tile x30 -geometry 150x100 ~/mosaico.jpg



Por fim, eu queria a imagem mais horizontal do que como ficou. Para tal, diminui a quantidade de linhas horizontais, utilizando este comando:
montage * -tile x26 -geometry 150x100 ~/mosaico.jpg

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! ;)
Avatar do usuário
Claudio Novais
Editor do Ubuntued
 
Mensagens: 16869
Registrado em: 25 Maio, 2011

Re: Como criar um mosaico de fotografias de uma pasta

Mensagempor Luis Cardoso » Sáb, 2 de Março 2013, 20:16

Bom tutorial :yeah:
ImagemImagem
«Escolhe um trabalho de que gostes, e não terás que trabalhar um só dia na tua vida» - Confúcio
Avatar do usuário
Luis Cardoso
Redator
 
Mensagens: 10455
Registrado em: 26 Maio, 2011
Localização: Portugal

Re: Como criar um mosaico de fotografias de uma pasta

Mensagempor Jeferson Oliveira » Seg, 4 de Março 2013, 22:14

Claudio, exite uma forma de fazer este mosaico baseado em uma gravura ou imagem, dando a impressão que o mosaico (com todas fotos juntas) de longe aparenta ser uma foto ou uma gravura?
Avatar do usuário
Jeferson Oliveira
 
Mensagens: 191
Registrado em: 06 Outubro, 2012
Localização: Cachoeirinha, Rio Grande do Sul - Brasil

Re: Como criar um mosaico de fotografias de uma pasta

Mensagempor Claudio Novais » Seg, 4 de Março 2013, 22:16

Por acaso inicialmente pensei em fazer isso, mas como queria fazer uma imagem para esse dia não procurei muito. Pelo procurei, existe alguns algoritmos que fazem isso, mas não encontrei nada para fazer nativamente no computador :|
Avatar do usuário
Claudio Novais
Editor do Ubuntued
 
Mensagens: 16869
Registrado em: 25 Maio, 2011

Re: Como criar um mosaico de fotografias de uma pasta

Mensagempor Claudio Novais » Seg, 4 de Março 2013, 22:26

Afinal existe uma forma bem simples! Não experimentei, quem quiser experimentar agradeço feedback! :D


Para instalar basta clicar neste botão ou executar o comando seguinte:
sudo apt-get install -y metapixel


Depois preparar as imagens:
metapixel-prepare -r pastaOrigem pastaDestino --width=48 --height=48


Criar o mosaico, usando a mesma pasta de destino
metapixel --metapixel input.jpg output.png -l pastaDestino -s 10
Avatar do usuário
Claudio Novais
Editor do Ubuntued
 
Mensagens: 16869
Registrado em: 25 Maio, 2011

Re: Como criar um mosaico de fotografias de uma pasta

Mensagempor Exploit » Seg, 4 de Março 2013, 23:32

os resultados são surpreendentes
Avatar do usuário
Exploit
 
Mensagens: 1297
Registrado em: 31 Agosto, 2011

Re: Como criar um mosaico de fotografias de uma pasta

Mensagempor Luis Cardoso » Seg, 4 de Março 2013, 23:38

Funcionar, até funciona, mas é preciso ter umas boas imagens coloridas...
ImagemImagem
«Escolhe um trabalho de que gostes, e não terás que trabalhar um só dia na tua vida» - Confúcio
Avatar do usuário
Luis Cardoso
Redator
 
Mensagens: 10455
Registrado em: 26 Maio, 2011
Localização: Portugal

Re: Como criar um mosaico de fotografias de uma pasta

Mensagempor Claudio Novais » Seg, 4 de Março 2013, 23:52

Experimentei agora mesmo os dois comandos acima, com a seguinte imagem de input:


A pasta de origem das imagens foi a mesma do tutorial. O comando, em vez de pôr -s 10, utilizei a flag a 5, pois a imagem gerada tinha 30MB. Assim só tem 3MB xD
Avatar do usuário
Claudio Novais
Editor do Ubuntued
 
Mensagens: 16869
Registrado em: 25 Maio, 2011

Re: Como criar um mosaico de fotografias de uma pasta

Mensagempor Luis Cardoso » Seg, 4 de Março 2013, 23:58

Claudio Novais (04-03-2013, 22:52) escreveu:Experimentei agora mesmo os dois comandos acima, com a seguinte imagem de input:


A pasta de origem das imagens foi a mesma do tutorial. O comando, em vez de pôr -s 10, utilizei a flag a 5, pois a imagem gerada tinha 30MB. Assim só tem 3MB xD

Bolas, fui o feliz contemplado, já que grande parte dos deskmods são os meus xD
ImagemImagem
«Escolhe um trabalho de que gostes, e não terás que trabalhar um só dia na tua vida» - Confúcio
Avatar do usuário
Luis Cardoso
Redator
 
Mensagens: 10455
Registrado em: 26 Maio, 2011
Localização: Portugal


Próximo

Voltar para Scripts, programação e aplicações em desenvolvimento

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes