Como exibir imagens em uma grade que consistem em tamanho específico (MxN) em FEH?

1

Eu tenho cerca de 30 imagens ( todas as imagens do mesmo tamanho: 300x75 ) em um diretório e gostaria de apresentá-las em uma grade de tamanho 5x6 .

até agora eu fiz isso manualmente:

$ feh -i --thumb-width 300 --thumb-height 75  --limit-width 300*5 --limit-height 75*6 . &

Existe uma opção incorporada para isso? algo assim:

$ feh -i --num-rows 5 --num-columns 6 .

Que parece muito mais limpo, além disso, gostaria de evitar:

  1. A indicar o tamanho das imagens originais thumb-width e thumb-height , por isso, no modo de índice, não redimensionará o tamanho original. li>
  2. Calculando manualmente limit-width e limit-height para que todas as imagens sejam apresentadas.
por JammingThebBits 03.08.2018 / 12:20

1 resposta

1

Ao pesquisar isso, não vi nada que pareça permitir isso nativamente dentro de feh . O switch de montagem é o mais próximo, mas não permite nenhum dimensionamento dinâmico, apenas exibe uma montagem com base nas opções -H e -W .

Considerando isso, acho que a melhor abordagem seria algo assim:

$ cat fehm.bash
#!/bin/bash

 gridW=5
 gridH=6

 file=(*.jpg)
 W=$(identify -ping -format '%w' $file)
 H=$(identify -ping -format '%h' $file)
 LW=$(($W * $gridW))
 LH=$(($H * ($gridH + 1)))
 feh -i --index-info '' --thumb-width $W --thumb-height $H \
   --limit-width $LW --limit-height $LH .


 #    --index-info format
 #             Show image information based on format below thumbnails in 
 #             index / thumbnail mode.  See FORMAT SPECIFIERS.  May contain 
 #             newlines. Use "--index-info ''" to display thumbnails without  
 #             any info text
 #
 #             Note: If you specify image-related formats (such as %w or 
 #             %s), feh needs to load all images to calculate the dimensions 
 #             of its own window.  So when using them with many files, it 
 #             will take a while before a feh window becomes visible. Use 
 #             --preload to get a progress bar.
 #
 #   -i, --index
 #             Enable Index mode.  Index mode is similar to montage mode, 
 #             and accepts the same options.  It creates an index print of 
 #             thumbnails, printing the image name beneath each thumbnail.  
 #             Index mode enables certain other options, see INDEX AND 
 #             THUMBNAIL MODE OPTIONS and MONTAGE MODE OPTIONS.
 #
 #   -H, --limit-height pixels
 #             Limit the height of the montage.
 #
 #   -W, --limit-width pixels
 #             Limit the width of the montage, defaults to 800 pixels.
 #
 #             If both --limit-width and --limit-height are specified, the 
 #             montage will be exactly width x height pixels in dimensions.
 #
 #   -E, --thumb-height pixels
 #             Set thumbnail height.
 #
 #   -y, --thumb-width pixels
 #             Set thumbnail width.

O texto acima pode ser incorporado em uma função Bash se você não quiser ter um script:

$ cat fehm_func.bash
fehm () {
 gridW=5
 gridH=6

 file=(*.jpg)
 W=$(identify -ping -format '%w' $file)
 H=$(identify -ping -format '%h' $file)
 LW=$(($W * $gridW))
 LH=$(($H * ($gridH + 1)))
 feh -i --index-info '' --thumb-width $W --thumb-height $H \
   --limit-width $LW --limit-height $LH .
}

Você simplesmente usa o código acima da seguinte forma:

$ . fehm_func.bash
$ fehm

Modificação

Uma coisa que notei enquanto fazia isso era que o seu exemplo original não parecia funcionar. A configuração da grade para 5x6 resultaria em apenas 5x5. Isso parece ser devido ao espaço entre as linhas de imagens. Para contornar isso, eu preenchi o cálculo de $gridH adicionando um 1 a ele, efetivamente tornando-o 5x7.

 LH=$(($H * ($gridH + 1)))

Exemplo de execução

Com o acima no lugar. Eu usei o seguinte script para construir alguns dados de amostra. Os dados são compostos de imagens idênticas ao seu tamanho, 300 x 75 e alternam entre o azul e o vermelho, para ajudar a ver os efeitos da solução que estou fornecendo.

$ for i in {01..30};do int=$(expr $i); [ $((int%2)) -eq 0 ] && c=blue || \
   c=red; convert -size 300x75 xc:${c} img${i}.jpg;done

Resultados neste conjunto de arquivos:

$ ls | column -c 80
img01.jpg   img07.jpg   img13.jpg   img19.jpg   img25.jpg
img02.jpg   img08.jpg   img14.jpg   img20.jpg   img26.jpg
img03.jpg   img09.jpg   img15.jpg   img21.jpg   img27.jpg
img04.jpg   img10.jpg   img16.jpg   img22.jpg   img28.jpg
img05.jpg   img11.jpg   img17.jpg   img23.jpg   img29.jpg
img06.jpg   img12.jpg   img18.jpg   img24.jpg   img30.jpg

Com os dados acima, agora se usarmos nossa função fehm :

$ fehm

Referências

por 04.08.2018 / 18:53