web-dev-qa-db-ja.com

FEHで特定のサイズ(MxN)で構成されるグリッドに画像を表示するにはどうすればよいですか?

ディレクトリに約30枚の画像(同じサイズのすべての画像:300x75)があり、サイズ5x6のグリッドに表示したいと思います。

これまでのところ、手動​​で行っています。

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

それを行うための組み込みオプションはありますか?このようなもの:

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

これははるかにきれいに見えます、さらに私は避けたいです:

  1. 元の画像のサイズを示すthumb-widthおよびthumb-heightしたがって、インデックスモードでは、元のサイズのサイズを変更しますnot
  2. 手動で計算limit-widthおよびlimit-heightすべての画像が表示されるようにします。
3
JammingThebBits

これを調査したところ、feh内でこれをネイティブに許可するように見えるものは何も見つかりませんでした。モンタージュスイッチが最も近いですが、動的なサイズ設定はできず、-Hおよび-Wスイッチに基づいてモンタージュを表示するだけです。

これを考えると、最善のアプローチは次のようなものになると思います。

$ 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.

スクリプトが必要ない場合は、代わりに上記をBash関数に組み込むことができます。

$ 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 .
}

あなたは単にこのように上記を調達します:

$ . fehm_func.bash
$ fehm

変形

これを行っているときに気付いたのは、元の例が機能していないように見えることです。グリッドを5x6に設定すると、5x5のみになります。これは、画像の行の間にスペースがあるためと思われます。これを回避するために、$gridHの計算に1を追加してパディングし、事実上5x7にしました。

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

実行例

上記を実行します。次のスクリプトを使用して、いくつかのサンプルデータを作成しました。データは、300x75のサイズと同じ画像で構成されており、私が提供しているソリューションの効果を確認するのに役立つように、青と赤が交互に表示されます。

$ 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

このファイルセットの結果:

$ 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

上記のデータを使用して、fehm関数を使用すると次のようになります。

$ fehm

ss1

参考文献

2
slm