Node.jsのライブラリsharpで画像変換を試してみる

Node.jsのライブラリsharpを使って画像変換をしてみました。

インストール

npm install sharp

元画像

1024x683の元の画像です。

元の画像

ぼかし(blur)

blur(Number)

画像をぼかします。どれくらいぼかすかを0.3〜1000までの値で指定できます。

const sharp = require('sharp')

sharp('image.jpg')
  .blur(10)
  .toFile('output.jpg', (err, info)=>{
    if(err){
      throw err
    }
    console.log(info)
  })

出力

{ format: 'jpeg',
  width: 1024,
  height: 683,
  channels: 3,
  premultiplied: false,
  size: 30660 }

変換画像

ぼかし適用画像

シャープネス

sharpen(Number)

シャープネスの度合いを引数で指定出来ます。

const sharp = require('sharp')

sharp('image.jpg')
  .sharpen(10)
  .toFile('output.jpg', (err, info)=>{
    if(err){
      throw err
    }
    console.log(info)
  })

出力

{ format: 'jpeg',
  width: 1024,
  height: 683,
  channels: 3,
  premultiplied: false,
  size: 196716 }

変換画像

シャープネス適用画像

メディアンフィルタ

median(Number)

ノイズを除去したりするメディアンフィルタをかけることができます(今回は分かりやすくするため強くかけています)
ウィンドウサイズを引数で指定できます。

const sharp = require('sharp')

sharp('image.jpg')
  .median(10)
  .toFile('output.jpg', (err, info)=>{
    if(err){
      throw err
    }
    console.log(info)
  })

出力

{ format: 'jpeg',
  width: 1024,
  height: 683,
  channels: 3,
  premultiplied: false,
  size: 196716 }

変換画像

シャープネス適用画像

グレースケール

const sharp = require('sharp')

sharp('image.jpg')
  .grayscale()
  .toFile('output.jpg', (err, info)=>{
    if(err){
      throw err
    }
    console.log(info)
  })

出力

{ format: 'jpeg',
  width: 1024,
  height: 683,
  channels: 3,
  premultiplied: false,
  size: 146132 }

変換画像

グレースケール変換画像

明るさ変換(gamma)

gamma(Number)

1.0〜3.0の値を指定します。デフォルトは2.2です。

const sharp = require('sharp')

sharp('image.jpg')
  .gamma(3)
  .toFile('output.jpg', (err, info)=>{
    if(err){
      throw err
    }
    console.log(info)
  })

出力

{ format: 'jpeg',
  width: 1024,
  height: 683,
  channels: 3,
  premultiplied: false,
  size: 173057 }

ノーマライズ

normalise()

今回の画像だとわかりにくいのですが画像の明るさを最小から最大になるようにレンジを広げてコントラストを上げます。

const sharp = require('sharp')

sharp('image.jpg')
  .normalise()
  .toFile('output.jpg', (err, info)=>{
    if(err){
      throw err
    }
    console.log(info)
  })

出力

{ format: 'jpeg',
  width: 1024,
  height: 683,
  channels: 3,
  premultiplied: false,
  size: 156990 }

変換画像

明るさ変換(gamma)画像

白黒

threshold(Number)

白(#FFF)と黒(#000)だけの画像に変換します。0〜255までの値でしきい値を指定できます。

const sharp = require('sharp')

sharp('image.jpg')
  .threshold(100)
  .toFile('output.jpg', (err, info)=>{
    if(err){
      throw err
    }
    console.log(info)
  })

出力

{ format: 'jpeg',
  width: 1024,
  height: 683,
  channels: 3,
  premultiplied: false,
  size: 177187 }

変換画像

グレースケール変換画像

色反転(ネガ)

negate()

色を反転した画像にできます。

const sharp = require('sharp')

sharp('image.jpg')
  .negate()
  .toFile('output.jpg', (err, info)=>{
    if(err){
      throw err
    }
    console.log(info)
  })

出力

{ format: 'jpeg',
  width: 1024,
  height: 683,
  channels: 3,
  premultiplied: false,
  size: 157001 }

変換画像

ネガ画像

上下反転

flip()

上下反転します。

const sharp = require('sharp')

sharp('image.jpg')
  .flip()
  .toFile('output.jpg', (err, info)=>{
    if(err){
      throw err
    }
    console.log(info)
  })

出力

{ format: 'jpeg',
  width: 1024,
  height: 683,
  channels: 3,
  premultiplied: false,
  size: 158509 }

変換画像

上下反転画像

左右反転

flop()

左右を反転します。

const sharp = require('sharp')

sharp('image.jpg')
  .flop()
  .toFile('output.jpg', (err, info)=>{
    if(err){
      throw err
    }
    console.log(info)
  })

出力

{ format: 'jpeg',
  width: 1024,
  height: 683,
  channels: 3,
  premultiplied: false,
  size: 156977 }

変換画像

左右反転画像

回転

rotate(Number)

角度を引数で指定します。

const sharp = require('sharp')

sharp('image.jpg')
  .rotate(90)
  .toFile('output.jpg', (err, info)=>{
    if(err){
      throw err
    }
    console.log(info)
  })

出力

{ format: 'jpeg',
  width: 683,
  height: 1024,
  channels: 3,
  premultiplied: false,
  size: 159437 }

変換画像

回転画像

linear

linear(a, b)

画像のそれぞれのpixel値をa * input + bという式に当てはめて計算します。

const sharp = require('sharp')

sharp('image.jpg')
  .linear(1.5, 50)
  .toFile('output.jpg', (err, info)=>{
    if(err){
      throw err
    }
    console.log(info)
  })

出力

{ format: 'jpeg',
  width: 1024,
  height: 683,
  channels: 3,
  premultiplied: false,
  size: 167076 }

変換画像

linear画像