Estou tentando selecionar algumas imagens de arte para ajustar alguns novos quadros. Gostaria de poder classificar essas imagens por proximidade a uma proporção específica e depois visualizá-las em ordem decrescente de proximidade através de algo como feh.
Existe alguma expressão gloriosa de Unix de uma linha? Caso contrário, algumas dezenas de linhas de Python devem esclarecer isso.
identify -format "%[fx:w/h]:%M\n" *.jpg
. Não sei como classificar facilmente por proximidade a um valor arbitrário.sort
parece não apoiar essa classificação.Respostas:
Usando o comentário do ImageNagick da NN como líder, acontece que você pode fazer cálculos arbitrários como parte de sua
-format
saída. Então, uma maneira possível:deve fazer o que quiser. Observe que 4/3 em há uma constante, a proporção desejada. Obviamente, você pode achar isso como a saída de um anterior
identify
(para corresponder a "mais próximo desta imagem").Para explicar, estamos considerando a clara diferença entre a proporção desejada e a real. Multiplicando por um número grande e arredondando. A multiplicação e a rodada são porque a classificação manipula apenas números inteiros, não racionais.
editar
Acontece
sort
que parece fazer racional, não apenas números inteiros. É até especificado na Single Unix Specification (v4). Portanto, você pode se livrar dessa solução alternativa:fonte
33333:cover.jpg
onde cover.jpg é 500x500.Bem, a maneira mais fácil de fazer isso seria usar o ImageMagick . Ele deve estar nos repositórios da sua distribuição Linux, para sistemas baseados em debian, execute:
Um dos programas do ImageMagick é
identify
o de imprimir as características de uma lista de arquivos de imagem de entrada. Combiná-lo comsort
, fornecerá uma lista de imagens classificadas por tamanho (você pode alterar png para qualquer extensão que tenha:Se você realmente precisa da proporção e não apenas do tamanho, tente algo como isto:
Opção simples, assume que os nomes das suas imagens não têm espaços :
O comando gawk divide o terceiro campo (o tamanho da imagem que tem o formato LxH) na matriz "tamanhos" e depois imprime o 1º campo (o nome da imagem) e o resultado da divisão do comprimento da imagem pela sua altura. O
sed
comando está apenas embelezando a saída e osort
comando classifica o resultado de acordo com a proporção do tamanho da imagem.Mais complexo, este pode lidar com espaços nos nomes dos arquivos:
Aqui estamos usando
find
para identificar os arquivos nos quais estamos interessados e executar oidentify
comando e, em seguida, canalizar sua saída através de um pequeno script PERL. A expressão regular procura três letras maiúsculas ([A-Z]{3}
), que devem ser o formato da imagem. Depois que descobrimos isso, é fácil identificar o nome e as dimensões da imagem.Não estou usando o gawk aqui porque a presença de espaços nos nomes dos arquivos de entrada confundirá os números dos campos. Finalmente, o script imprimirá o nome da imagem e o resultado da divisão comprimento / altura que
sort
numericamente.Se simplesmente navegar nas proporções disponíveis não for suficiente, se você tiver pelo menos uma imagem com a proporção desejada, basta usar grep para extrair as imagens cuja proporção estiver mais próxima:
fonte
Você pode calcular a diferença de cada proporção com a referência. Parece a resposta de derobert, mas mais simples:
fonte
Uma proporção é apenas um número, para que você possa navegar pelas imagens de acordo com seus nomes, se o nome tiver o prefixo com a proporção. A criação de links simbólicos com a proporção pré-pendente permite navegar pelas imagens classificadas por proporção.
Os seguintes visualizadores funcionam como esperado. ( feh não encaminha / recua, mesmo para imagens reais - no meu sistema)
Vá para o
ar-sort
diretório e navegue do ponto de partida (proporção) em que estiver interessado.Os nomes dos links simbólicos são assim:
fonte
Minha linha usual de raciocínio é usar a métrica da distância quadrática do erro sempre que ouvir as palavras "grau de proximidade". Pode-se certamente usar valores absolutos, e seria mais rápido. O script usa como argumento a proporção ideal , processa todos os arquivos * .jpg no diretório atual e os produz em ordem crescente de divergência em relação à proporção ideal.
head
remove o caractere de final de linha à direita inserido pelo ImageMagick.O script contém um comando gawk que define o separador do campo de saída como um caractere improvável, calcula a diferença ao quadrado e imprime de volta o nome do arquivo de diferença do par. A classificação é realizada e as informações desnecessárias (diferença quadrática da proporção) são selecionadas
cut
.fonte