コマンドで文字列画像を生成する

ShellScriptでドヤりたいGWアドベントカレンダー3日目いくで。

適当な画像が必要なときって結構あると思う。
そんな時一々Googleで画像検索するのが億劫になったのでコマンド一発で作れるようにした。

デモ

こんな感じで好きな文字列の画像を生成する。

https://rasukarusan.github.io/blog-assets/shell_convert_image/demo2.gif

方法

function create_bg_img() {
    local size=1280x760
    local backgroundColor="#000000"
    local fillColor="#ff8ad8" # 文字色
    # フォントによっては日本語対応しておらず「?」になってしまうので注意
    local fontPath=/System/Library/Fonts/ヒラギノ明朝\ ProN.ttc 
    local default_caption='(・∀・)'
    local caption=${1:-$default_caption}
    local imgPath=~/output.png
    convert \
      -size $size  \
      -background $backgroundColor\
      -fill $fillColor \
      -font $fontPath \
      caption:$caption \
      $imgPath
}

convertコマンドを使用するので、imageMagickが必要。
Macだったらbrew install imagemagickでインストールできるかな。

実行

$ create_bg_img hoge

実行結果 f:id:rasukarusan:20190425215524g:plain

サイズを選択して生成したい

「1024px以下の画像のみ対応」とかあるので、ある程度サイズ指定して生成したい。
fzfでサイズを選択して生成の流れが一番楽。

function create_bg_img() {
    local sizes=(100x100 320x240 360x480 500x500 640x480 720x480 1024x768 1280x960)
    local size=$(echo ${sizes} | tr ' ' '\n' | fzf)
    local backgroundColor="#000000"
    local fillColor="#ff8ad8" # 文字色
    # フォントによっては日本語対応しておらず「?」になってしまうので注意
    local fontPath=/System/Library/Fonts/ヒラギノ明朝\ ProN.ttc 
    local default_caption='(・∀・)'
    local caption=${1:-$default_caption}
    local imgPath=~/output.png
    convert \
      -size $size  \
      -background $backgroundColor\
      -fill $fillColor \
      -font $fontPath \
      caption:$caption \
      $imgPath
}

サイズ一覧はWikipediaから適当に取ってきた。

画面解像度 - Wikipedia

実行結果

https://rasukarusan.github.io/blog-assets/shell_convert_image/demo2.gif
サイズを指定して生成

iTermの背景画像を差し替える

AppleScriptと組み合わせればこんなこともできる。

https://rasukarusan.github.io/blog-assets/shell_convert_image/demo2.gif
SSHした時にiTerm上にホスト名を表示する

SSHしたときにホスト名の文字列画像を生成して、AppleScriptでiTermの背景画像に設定しています。

iTermの背景画像を設定するAppleScript
iterm_change_bg_img.sh

#!/usr/bin/osascript
on run argv
    tell application "iTerm"
        activate
        set _current_session to current session of current window
        tell _current_session
            set image_path to (item 1 of argv)
            set background image to image_path
        end tell
    end tell
end run

sshする時にitermの画像を設定する
.zshrc

function create_bg_img() {
    local size=1280x960
    local backgroundColor="#000000"
    local fillColor="#ff8ad8" # 文字色
    local fontPath=/System/Library/Fonts/ヒラギノ明朝\ ProN.ttc 
    local default_caption='(・∀・)'
    local caption=${1:-$default_caption}
    local imgPath=~/output.png
    convert \
      -size $size  \
      -background $backgroundColor\
      -fill $fillColor \
      -font $fontPath \
      caption:$caption \
      $imgPath
}

function ssh_local() {
    local ssh_config=~/.ssh/config
    local server=$(cat $ssh_config | grep "Host " | sed "s/Host //g" | fzf)
    if [ -z "$server" ]; then
        return
    fi
    # 画像生成
    create_bg_img $server
    # itermに画像を設定
    osascript ~/iterm_change_bg_img.sh ~/output.png
    ssh $server
}

終わり

shellの良いところはすぐ試せるし、いろんなものと絡められるところ。
あと依存は多少あるが、注意すれば割とどこでも動くところがスキ。

SSHしたときに画像を差し替えるってのは実際は使ってない。iTermのバッジでホスト名を表示するほうが美しかったので普段はそっちを使っている。