画像関連を扱う場合、C/C++, python等でコンピュータビジョン系の開発を行う場合には、OpenCVというOSSのライブラリを使うことが多いですが、ちょっとお試しでjavascriptで画像を扱う場合に良さそうな「sharp」というライブラリを見つけたので、触った感想などを紹介したいと思います。
特徴
- パッケージ管理(npm)されている
- 多くの画像フォーマット(JPEG, PNG, WebP, GIF, TIFF, SVG)に対応している
- 処理速度が高速(jimp)と比較
- 豊富な画像処理機能(公式サイト)を提供
- インターフェースがCallback, Promise Streamに対応
使い方
インストール
// 下記コマンドを実行する
$ yarn add sharp
// typescriptで利用する場合には、型も公開されている!
$ yarn add --dev @types/sharp
下記のコードは、exif-readerというライブラリも合わせて、JPEG、TTIFF画像に埋め込まれているExif情報を取得するサンプルコードです。すごくシンプルに情報が引っ張れるます。Exif(Exchangeable image file format)は、写真用のメタデータを含む画像ファイルフォーマットで、カメラの位置情報、撮影条件、場所(GPS)情報などが含まれます。
import sharp from 'sharp' const exif = require('exif-reader') // 画像ファイルのパスをsharp()に指定 const imageFile = 'sample.jpg' const metadata = await sharp(imageFile).metadata() // 画像データ表示 console.log(metadata); constole.log(exif(metadata.exif))
別画像への出力するパターンもせっかくなので、試してみます。次世代画像フォーマットの一つ「webp」へ変換するサンプルです。
import sharp from 'sharp' const imageFile = 'sample.jpg' const image = sharp(imageFile) await image.toFormat('webp').toFile('sample.webp')
おわり
今回は画像ライブラリ「sharp」の使い方をご紹介しました。
Node.js
でも気軽に画像を回転したり反転させることができるので、とても便利だと思います。まだ、テキストの追加機能などは、対応されていないですが、ちょっとした画像編集などをする際には、シンプルで使いやすいのでおすすめです。