ハイパーマッスルエンジニア

Vim、ShellScriptについてよく書く

Mac専用sipsコマンドで、画像に枠線をサクッとつける

f:id:rasukarusan:20210707141514p:plain
Mac標準搭載のコマンドでsipsコマンドがある。画像情報を取得したり付与したりできる。
画像のコマンドといえばimagemagickだが、imagemagickよりも少ないオプションで、かつ直感的に実行できるのがsipsコマンドの良いところ。brew等で別途インストールしなくて済むのも良い。

sipsコマンドを知る上でめちゃくちゃ参考になるサイト

基本的な使い方はここ。

Macのターミナルで簡単に画像処理できるsipsの使い方 - Qiita

こちらはOCRツールのtesseractとsipsを組み合わせて中々面白いことをしている。

Tesseractでデスクトップの一部にOCRをかける - Qiita

sipsで画像に枠線をつける

sips -p ${height} ${width} --padColor ${color} ${imagePath} -o ${newImagePath}

# 元画像320x320, 枠線の太さを20に設定
sips -p 340 340 --padColor 000000 demo.png -o border_demo.png

f:id:rasukarusan:20210707140627j:plain
元画像

f:id:rasukarusan:20210707140637j:plain
#000000の枠線太さ20の画像

元画像のサイズを知っておく必要があるので、それもsipsコマンドで取得するようにすると汎用的になる。
sipsコマンドで画像の幅、高さを指定するには-gオプションを利用する

# 幅を取得
sips -g pixelWidth demo.jpg

# 高さを取得
sips -g pixelHeight demo.jpg

add_border.sh

#!/usr/bin/env bash

main() {
  local image=$1
  local color=${2:-a0a8a9}
  local borderWeight=${3:-10}
  local width=$(sips -g pixelWidth $1 | awk -F ' ' '{print $2}')
  local height=$(sips -g pixelHeight $1 | awk -F ' ' '{print $2}')
  local borderWidth=$(expr $width + $borderWeight)
  local borderHeight=$(expr $height + $borderWeight) 
  sips -p $borderHeight $borderWidth --padColor $color $image -o border_${image}
}
main

使い方

sh add_border.sh demo.jpg

# 枠線色#000000、太さ20
sh add_border.sh demo.jpg 000000 20

終わり

地味に枠線ほしいときあるから、きっと役に立つ。