Goを使った違和感のない画像リサイズができるライブラリ「Caire」を試す

縦横比を無視したリサイズをしても違和感のない画像に仕上げることができる画像リサイズ用ライブラリ「Caire」が気になって仕方がなかったので試してみました。

Caire is a content aware image resize library based on Seam Carving for Content-Aware Image Resizing paper.

https://github.com/esimov/caire

前提

$ go version
go version go1.10.1 darwin/amd64

ない人はbrew install goなどで入れておきましょう。

インストール

brewで入ります。便利ですね。

$ export GOPATH="$HOME/go"
$ export PATH="$PATH:$GOPATH/bin"
$ brew tap esimov/caire
$ brew install caire
$ caire --help
Usage of caire:
  -blur int
    	Blur radius (default 1)
  -debug
    	Use debugger
  -height int
    	New height
  -in string
    	Source
  -out string
    	Destination
  -perc
    	Reduce image by percentage
  -sobel int
    	Sobel filter threshold (default 10)
  -square
    	Reduce image to square dimensions
  -width int
    	New width

使ってみる

早速画像を編集してみましょう。今回はこのAWSカルタの画像を使ってみます。

69KB, 640 * 427px

以下のようにコマンドを実行します。

$ caire -in aws_karuta_phptp.jpg -out ./out.jpg -width=20 -height=20 -perc=1
Processing... -
Rescaled in: 23.08s
Saved as: out.jpg 

そして出力されたファイルが以下のものです。

156KB, 512 * 341 px

多少カードが歪な形になっていますが、全体としてはそこまで違和感のあるリサイズにはなっていないかなと思います。

もう一枚ためす

せっかくなのでもう1枚。

574 KB, 2048 * 1536 px

20%圧縮でテスト

こちらも先程と同じ条件で圧縮してみます。

$ caire -in APC_0193.jpg -out ./sakura.jpg -width=20 -height=20 -perc=1
Processing... |
Rescaled in: 1074.28s
Saved as: sakura.jpg 

元画像のサイズが大きいため、少々時間がかかりました。

1300MB, 1638 * 1128 px

背景のぼかしが強くなっている気がしますが、違和感のない形になっているかなと思います。ファイルサイズが大きくなっていますが、あくまで画像の切り詰めがメインと考えて割り切る場面かなという気はします。

50%圧縮でテスト

どうせなのでもっと思いっきり圧縮してみましょう。それぞれ50%まで減らしてみます。

$ caire -in APC_0193.jpg -out ./sakura1.jpg -width=50 -height=50 -perc=1
Processing... |
Rescaled in: 1957.58s
Saved as: sakura1.jpg 

先程の倍ほど時間がかかりました。圧縮する部分の計算量が増えるなどでしょうか。

582KB, 1024 * 768 px

そしてなんとも言えない独特な画像に。何事もやり過ぎは禁物ですね。

縦長画像を正方形に

最後に個人的に一番試してみたかったケースをトライしてみます。

648KB, 1365 * 2048px

縦長で撮らないと収まらないけど、縦長そのままで使うのはちょっと・・・というケースですね。

高さを50%削れば(理論上)横長になるはずなので、試してみます。

$ caire -in moon.jpg -out ./moon1.jpg -height=50 -perc=1
Processing... \
Rescaled in: 1074.90s
Saved as: moon1.jpg 
714KB, 1365 * 1024px

いい感じになりました。雲の形も違和感なく圧縮されていますね。

どう使う?

とりあえず無難にローカルで実行するところからかなぁと思っています。実行時間がそこそこかかるので、AWS Lambdaでやるにはちょっと工夫がいりそうかなぁという気もします。(そもそもGoのとりまわしがよくわかってない問題もある)

[PR]WordPressの入門書共著しました

ローカル環境の構築からテーマ作成・サイトの運営やコミュニティの紹介など、
「WordPressを触って終わり」ではなく、仕事でできるようになるには何が必要かがわかるようになる内容になっています。


(目次)
Lesson01:WordPressをはじめよう
Lesson02:必要な環境を整えインストールする
Lesson03:初期設定をしよう
Lesson04:コンテンツの追加・編集とナビゲーションの設定
Lesson05:テーマとプラグインによる外観カスタマイズ
Lesson06:プラグインによる機能の追加
Lesson07:ローカル開発環境をつくろう
Lesson08:テーマ作成の第一歩〜PHPとテーマの基礎
Lesson09:テンプレートファイルの作成
Lesson10:各種テンプレートファイルの作成
Lesson11:テーマカスタマイザーの実装
Lesson12:WordPressを本番環境へデプロイする
Lesson13:サイトの広報と集客
Lesson14:サイトの運営と管理
Lesson15:もっとWordPressを使いこなす・学ぶ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です