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

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

広告ここから
広告ここまで

目次

    縦横比を無視したリサイズをしても違和感のない画像に仕上げることができる画像リサイズ用ライブラリ「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のとりまわしがよくわかってない問題もある)

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark