Swiftでlibwebpラッパーを作っている
Swiftでlibwebpラッパーを作っている。
最初のモチベーションとして、社内のデザイナーがWebP*1への変換ってどうするの?って言い始めた時に、 ちょっとググってみたところ、そんなに便利なMacのGUIで変換できるアプリがないなーという話があって、 試しにMacアプリの練習がてら作ってみるかーというところだった。
何も考えずにlibwebpをSwiftのModuleとしてimportして実際に使うアプリを作ってみようとしてみたところ、 CのライブラリをSwiftで扱うのが意外と大変なので、一旦ライブラリとして外だししてみようと思い始めた。
ただ、自分で作るのだるいので誰かいいもの作ってないかと検索してみるとiOS/macOS/Swift周りのWebP界隈は現在こんな状況だった。
- GitHub - webmproject/libwebp: Mirror only. Please do not send pull requests.
- GitHub - seanooi/iOS-WebP: Google's WebP image format decoder and encoder for iOS
- Objective-C製かつiOS向けオンリーのlibwebpラッパー。macで使えないしUIImageに密結合が嫌な感じ。
- GitHub - rs/SDWebImage: Asynchronous image downloader with cache support as a UIImageView category
- iOS用の老舗のリモート画像表示ライブラリはcocoapodsでlibwebpをとりこんでデコードしているみたい。
- GitHub - ImageOptim/ImageOptim: GUI image optimizer for Mac
- Mac向けのOSSの画像変換GUIアプリ。Objective-C製だしWebP対応してない。
- GitHub - 1000ch/WebPonize: WebPonize is a Mac OS App for converting PNG, JPEG, animated (or not) GIF images into WebP.
- GitHub - ics-creative/160203_electron_webp
- この記事書いてる時に見つけたElectronアプリ。ElectronなのでもちろんJS。
というわけで、以下のような要件でライブラリを作ってみることに。
ということで色々試行錯誤してv0.0.1のタグを打って、もともと最初に作っていたMacアプリ側でcarthage経由でインストールできた。 まだエンコードしか詳細なAPIに対応してなくてデコードの方は適当。詳細なAPIに対応すると、デコード時にcrop/resizeが出来るらしい。 あと、macOS/iOS両方でビルド出来るようにしてあって多分Linuxでもビルドできる状態にも出来そうだけどまだ未対応。
macOSだけでよければbrewでインストールしたlibwebpにリンクさえしとけばとりあえず動くけど、 iOSでも動かそうとするとlibwebpをiOS端末のCPU向けにビルドしないといけなかったりして、 プロジェクト構成作る時点からすでに結構めんどかったりする。
ということで、その辺の詳細な知見をAdvent Calendarの時に書くのでよろしくお願いします。
*1:そもそもWebPを使うといいことあるの?って思う人はこの辺を読んでみたりすると良いと思う。