Skip to content

Commit 575bfa5

Browse files
committed
Add image preview microservice
1 parent 4311fe4 commit 575bfa5

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

image-preview.js

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
'use strict'
2+
3+
const fs = require('fs')
4+
const path = require('path')
5+
const mime = require('mime-types')
6+
const { send, json } = require('micro')
7+
const Filter = require('instagram_js_filter')
8+
const effects = new Filter()
9+
10+
//
11+
// This microservice will be served as /preview
12+
//
13+
// It will receive the name of the uploaded image and the filter in a JSON
14+
// {
15+
// "name": "xxxx-xxx-xxx-xx.jpg",
16+
// "filter": "sepia"
17+
// }
18+
//
19+
module.exports = async function (req, res) {
20+
const body = await json(req)
21+
const { name, filter } = body
22+
23+
const type = mime.lookup(name)
24+
25+
let preview
26+
try {
27+
preview = await convert(name, filter)
28+
} catch (e) {
29+
send(res, 500, e.message)
30+
}
31+
32+
const imagePreview = `data:${type};base64,${preview.toString('base64')}`
33+
send(res, 200, { image: imagePreview })
34+
}
35+
36+
//
37+
// Convert an image and applies a filter
38+
//
39+
function convert (src, filter) {
40+
return new Promise((resolve, reject) => {
41+
fs.readFile(path.join(__dirname, 'uploads', src), (err, buffer) => {
42+
if (err) return reject(err)
43+
44+
const result = effects.apply(buffer, filter, {})
45+
resolve(result)
46+
})
47+
})
48+
}

0 commit comments

Comments
 (0)