-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtransform.js
74 lines (59 loc) · 1.25 KB
/
transform.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
const sharp = require( 'sharp' )
module.exports = ( imagePath, transformations ) => {
return new Promise( ( resolve, reject ) => {
let image = sharp( imagePath )
if ( 'w' in transformations || 'h' in transformations ) {
let width = undefined
let height = undefined
if ( 'w' in transformations ) {
width = parseInt( transformations.w )
delete transformations.w
}
if ( 'h' in transformations ) {
height = parseInt( transformations.h )
delete transformations.h
}
image.resize( width, height )
}
for ( transform in transformations ) {
image = transformImage( image, transform, transformations[ transform ] )
}
image.jpeg( {
progressive: true
} )
image.toBuffer( ( err, data, info ) => {
if ( err ) {
reject()
} else {
resolve( { err, data, info } )
}
} )
} )
}
transformImage = ( image, key, value ) => {
switch ( key ) {
case 'c':
switch ( value ) {
case 'fit':
image.max()
break
case 'pad':
image.embed()
break
}
break
case 'b':
image.background( value )
break
case 'g':
image.crop( sharp.gravity[ value ] )
break
case 'q':
image.jpeg( {
quality: parseFloat( value ),
progressive: true,
} )
break
}
return image
}