maimでお洒落にスクリーンショットを撮る
maim
maimは、コマンドでスクリーンショットを取ることができます。 また、maimは、「make image」の略だと聞くとすぐにコマンド名も覚えることができると思います。 archlinuxでのインストールは次の通り。
$ sudo pacman -S maim
使い方の基本は、コマンドラインから、出力ファイル名を明示して実行するだけ。
$ maim screenshot.jpg
まずは、デスクトップ全体のスクリーンショットが撮れます。
maimのオプション
実際の使い方とオブションを見ていきましょう。
画面の一部を撮る
sオブションで、画面の一部を抜き出して撮ることができます。
$ maim -s screenshot.jpg
コマンドを実行すると、カーソルが十字のものに変化します。 この状態で、クリック&ドラッグして、画面の一部を選択することができます。 若しくは、ウィンドウをクリックすることで、そのウィンドウ全体を選択することもできます。
つまり、maimのsオプションは、「任意の長方形」か「ウィンドウ」のどちらも選択することができます。
マウスカーソル
maimでは、デフォルトでスクリーンショットにマウスカーソルが写ります。 特に、sオプションを使って、撮りたいウィンドウをクリックして撮ると、 マウスカーソルもスクリーンショットに映り込みます。 マウスカーソルが邪魔な場合には、uオブションで、マウスカーソルを消す事ができます。
$ maim -su screenshot.jpg
透過等で上手く行かない時
デスクトップでpicom等のコンポジットアプリが動作していて、 ターミナルが透過(半透明で後ろが透けて見える)している場合、 maimでそのウィンドウのスクリーンショットを撮ると、 透過している画像が作成されます。 そして、スクリーンショットを撮った時に、 後ろに透けて見えていたものは、スクリーンショットに写りません。
例えば、デスクトップ全体が以下のようになっている時、
右上のターミナルにも背景が透過している様子が見て取れます。 この状態で、右上のウィンドウのスクリーンショットを撮ってみます。
$ maim -us screenshot_nobg.png
このファイルをfehで見ると、左側ウィンドウに表示されるように、透過されています(背景のチェック模様が見える)。
しかし、ここで、maimにBオプションを渡すと、背景を込みで撮ってくれます。
$ maim -usB screenshot_bg.png
このファイルをfehで見ると、左側ウィンドウに表示されるように、背景が一緒に撮影されています。
さて、普段ファイラーにrangerを使っていて、 画像プレビューで「ueberzug」を使っている人も多いと思います(うちは、kittyでueberzug)。 例えば、以下のような感じです。
この状態で、rangerの動いているターミナルのウィンドウをmaimで撮ってみましょう。
$ maim -us screenshot_ranger.png
撮った画像をfehで確認すると、ウィンドウが透けているのではなく、 画像プレビュー以外の部分の画像が抜け落ちてしまったおかしな画像が生成されています。
このような場合、Bオプションをつけると、ちゃんとしたスクリーンショットを撮影することができます。
$ maim -usB screenshot_ranger_withB.png
再度、撮った画像をfehで確認すると、今度はちゃんと撮れていることがわかります。
さて、ターミナルの透過自体がうっと惜しい場合、kittyの初期設定なら「Ctrl + Shift + a」したあと、「1」で不透過になります。 もとにに戻す時は、「Ctrl + Shift + a」したあと、「d」です。
ディレイで遅らせる
dオプションで任意の秒数、遅らせて撮影します。 例えば、5秒遅らせる場合は、以下のようにします。
$ maim -d 5 screenshot.jpg
デスクトップのスクリーンショットを撮りたい場合、maimをターミナルで実行すると、必ずそのターミナルがスクリーンショットに写ってしまいます。 そんなとき、撮りたいワークスペースと別の場所のターミナルやスクラッチパッドターミナルで、maimをdオプションを付け実行し、 遅延時間内に撮りたいワークスペースへ移動したり、スクラッチパッドを隠せば、maimのターミナルがないスクリーンショットが簡単に撮れます。
フォーマットとクオリティ
maimは、出力ファイル名を見て、適当に画像のフォーマットを決めてくれます。
一方、fオプションを使うことで、明示的に画像フォーマットを指定することができます。 指定できるフォーマットはhelpに記載されますが、現在のところ「png」、「jpg」、「bmp」、「webp」の4つです。
$ maim -f jpg screenshot.jpg
maimでは、mオプションで出力する画像のクオリティを決めることができます。 mオプションに1から10の間の数字を指定して、クオリティを指定します。 jpgとwebpでは数字が小さいほど低クオリティですが、ファイルサイズが小さくなり、 数字を大きくすると高クオリティですが、ファイルサイズが大きくなります。
$ maim -m 9 screenshot.jpg
pngファイルの場合、数字が小さいと圧縮率が小さい大きいサイズのファイルを生成し、 数字が大きくなるほど圧縮に時間をかけてファイルサイズが小さくなります。 bmpファイルは、mオプションの影響を受けません。
$ maim -m 9 screenshot.png
セレクトに付いて
maimのsオプションは、ドラッグすることで任意の範囲選択、クリックすることでウィンド選択という2つの選択が可能となっていました。 しかし、この操作について、クリックするつもりが、「ちょこっとドラッグ」してしまったがために、ウィンドウではなくて、 めちゃ小さな範囲だけがスクリーンショットとして撮られてしまう事故がおこりえます。 そこで、maimには、ある距離以上のドラッグをしないと、範囲選択しないでウィンドウ選択扱いにするためのオプションが用意されています。 これはtオプションに数字を渡して利用します。
たとえば、tオプションに0を渡すと、全てが範囲指定になるので、ウィンドウの選択ができなくなります。 一方で、tオプションに9999999を渡すと、画面内の何処までカーソルを動かしたとしても、範囲指定が出来ないので、結局ウィンドウ選択になります。
実際には、以下のコマンドを実行して、実際にドラッグすると何が起こっているか把握できると思います。 クリックしてそのままゆっくりドラッグし始めた時には、範囲選択の枠線がありませんが、クリックした地点からある程度離れた時に、 選択枠線が現れます。 つまり、選択枠線があらわれるまでは、ウィンドウ選択であり、選択枠線が現れた後は、その枠線で囲われた所がスクリーンショットとして撮られます。
$ maim -st 100 screenshot.png
このオプションはこれで何かを細かく調節するというよりも、 ウィンドウ選択のオプションは「s」ではなくて、以下のように「st 9999999」としてつかうと便利です。 (事実上、範囲選択できない)
$ maim -st 9999999 screenshot_window.png
windowを指定するオプション
maimのiオプションは、ウィンドウidを指定することで、スクリーンショットを撮るwindowを指定することが出来ます。 このiオプションに渡すウィンドウidは、xdotoolというコマンドで知ることが出来ます。 尚、archlinuxの場合、xdotoolは、以下のコマンドでインストールできます。
$ sudo pacman -S xdotool
xdotoolを使って、ウィンドウのidを調べるには、先ず次のコマンドを実行します。
$ xdotool selectwindow
コマンドを実行するとカーソルが四角の中にバツ印があるものに変わるので、 そのカーソルで調べたいウィンドウをクリックすると、そのウィンドウのidが出力されます。 たとえば、27262991と出力されたら、次のようにiオプションにその数字を渡すことで、maimでスクリーンショットを撮るウィンドウを指定することが出来ます。
$ maim -i 27262991 screenshot.jpg
しかし、実際にはこんな手間のかかることはしません。
このiオプションは、「現在のアクティブなウィンドウ」を調べるxdotool getactivewindow
コマンドと組み合わせて使われます。
$ xdotool getactivewindow
このコマンドをコンソールで直接実行すると、そのコンソールのウインドウidが返ります。 しかし、これをスクリプトにして、何かのキーにバインドする等、コンソール以外から起動すると、 その時点でアクティブになっているウィンドウのidを得ることができるのです。 そこで、スクリプトの中で、コマンド置換を使って以下のような記述をすることで、 スクリプト起動時にアクティブになっているウィンドウのidを得ることが出来、それをiオプションに指定してmaimでスクリーンショットを撮ることができるようになります。
maim -i $(xdotool getactivewindow) screenshot.jpg
スクリプトを書いて、キーバインドする時の参考にしましょう。
maimを標準出力へ
maimは、出力ファイル名を与えない場合、画像を標準出力へ出力します。 ですから、それをパイプでfehに流せば、そのまま画像を見ることが出来ます。 (そのかわり、画像は保存されません)
$ maim | feh --zoom 40% -
さて、こんな風に画像を閲覧するだけではなくて、 スクリーンショットをコマンドで撮ることの利点は、 撮った(作成した)画像を更に加工するプログラムを書くことで、 コマンド一発(キーにバインドすればワンボタンで)で、クールな画像を作成できるところです。 その一例が、以下のコマンドであり、maimのhelpで紹介されています。
$ maim -st 9999999 | convert - \( +clone -background black -shadow 80x3+5+5 \) +swap -background none -layers merge +repage shadow.png
「convert」コマンドは、image magickのコマンドです。システムにない場合は、先にインストールしましょう。
$ sudo pacman -S imagemagick
このコマンドは、maimでウィンドウ選択してスクリーンショットを撮ったあと、image magickという画像処理ソフトに渡し、加工したものをshadow.pngとして保存しています。 そして、この加工された画像は以下のようになります。
どうですか?わかりますか?
影がついてますよね??!!
昔、macbook air使ってた時、こんな感じのスクリーンショットが勝手に撮れていた気がするけれど、 xmonadですよーーー!撮ってるの。 なのに、自動的にお洒落なんです。 まぁ、実際には、影細くてわかりにくいので、調整しちゃいましょう。
$ maim -st 9999999 | convert - \( +clone -background black -shadow 80x10+10+10 \) +swap -background none -layers merge +repage shadow.png
-shadowに渡す数値を少し大きくしてみます。
良い感じになりました!
xmonadでキーにバインド
xmonadでだって、「PrtScr」キーでスクリーンショット撮りましょう。 しかも、お仕着せのスクリーンショットではなくて、自分の好きなスクリーンショットです。
まずは、maimやimage magickを利用したスクリーンショットを撮るためのスクリプトを作成します。
うちでは、~/.local/localscript/scsh_window
というファイルを以下の内容で用意しています。
このスクリプトに実行権限をあたえて、xmonad.hsのキーバインドの部分からspawn関数で呼び出します。 例えば、以下の通り。 xmonadでのキーの設定そのものについては、「xmonadでお洒落にキーのカスタマイズ」をみましょう。
...
,("M-S-<Print>", spawn "/home/neko/.local/localscript/scsh_window")
...
「print screen」キーは、<Print>で表現できます。 また、spawnの引数で呼び出すスクリプトファイルは、xmonadの立ち上げ時に、自分で追加したコマンド検索パスが環境変数PATHにはいっているかどうかわかりません。 そこで、よくわからない時、上手く行かない時は、悩まず絶対パスで指定しておけば間違いありません。
slopとは
さて、maimのヘルプをよむと「slop」に関するオプションというものが出てきます。 このslopは、「select operation」の略であり、名前が示すとおり xwindow上で、範囲選択をするためのプログラムだそうで、maimと同じ作者の人が作っています。
このslopは、maimのsオプション、即ち、範囲指定の時に呼び出されています。 そして、範囲指定する際の、範囲を表す「線」を色々とカスタマイズできます。 それがslopのオプションなのです。
で、このオプション。単純なものは、その線の幅なんかを指定するものなのですが、 slopのページで紹介されている通り、その線が「ウネウネ」動いたりするエフェクトをかけることが出来ます。
(画像はslopのページよりリンク)
エフェクトをかける準備としてまず、slopをgithubからクローンします。 リポジトリの中にあるshadeexamplesディレクトリの中身を ~/.config/slop/ディレクトリを作ってその中にコピーします。
準備が出来たら、maimのセレクトする時のプションに以下のものを追加します。
$ maim -s -r wiggle hoge.jpg
飽きるまでやってください。
0 件のコメント:
コメントを投稿