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 }
変換画像

白黒
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 }
変換画像
