画像関連を扱う場合、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でも気軽に画像を回転したり反転させることができるので、とても便利だと思います。まだ、テキストの追加機能などは、対応されていないですが、ちょっとした画像編集などをする際には、シンプルで使いやすいのでおすすめです。