Go言語で画像をリサイズするツールを作ってみました

こんばんは、id:maku693です。Go言語の練習としてimgresという画像リサイズツールを作ってみました。Goの標準ライブラリにGIF, JPEG, PNGのエンコーダー・デコーダーがあるのでそれを使っています。


入力ファイル名、出力画像の幅か高さ、出力ファイル名を指定すると、縦横比を保ったまま画像をそのサイズに収まるようにリサイズし、入力画像と同じフォーマットで保存します。

$ imgres -in gtsport.jpg -width 200 -out gtsport300.jpg

f:id:maku693:20200114020656j:plain
グランツーリスモSPORTで撮影した高解像度画像もこのとおり


入出力ファイル名の指定は必須ではなく、指定がなかった場合は標準入出力を利用します。

$ imgres -width 100 < cornellbox.png > cornellbox100.png

f:id:maku693:20200114020143p:plain
コーネルボックスです


こだわりポイントは指定された幅・高さと元画像の縦横比が異なる場合に、画像全体を収める (contain) か、はみ出させる (cover) か切り替えられる機能です。縦横比が異なる画像をたくさん扱うときに便利です。デフォルトでは収まるようにリサイズします。

$ imgres -in gtsport.jpg -width 150 -height 200 -fit cover -out gtsport150x200.jpg

f:id:maku693:20200114020532j:plain
150x200をはみ出るように(この画像の場合は高さ200pxを基準に)リサイズします


アニメーションGIFにも対応しています。実は素朴に image パッケージのインタフェースを使うだけではアニメーションGIFに対応できなかったので、フォーマットに応じてデコード・エンコードの仕組みを差し替えるようになっています(この辺は別でまた記事にしようと思います)。

imgres -in partyneopanda.gif -width 20 -out partyneopanda20.gif

f:id:maku693:20200114020010g:plain
極小partyねおぱんだです


ぜひご利用ください。

github.com