gm
을 사용하여 내 nodeJS 응용 프로그램에서 일부 이미지를 조작하고 있습니다. 내 기능이 이렇게 생겼어.NodeJS/gm : 비동기 호출로 약속 함
약간의 조작을위한 스위치가 있습니다 (이 예에서는 회전). gmStream
이 생성되고 스위치 .stream()
및 pipe()
이 사용됩니다. 지금까지 모든 것이 좋습니다.
스위치 케이스가 resize
인 경우, 이미지 크기를 알아야합니다.이 이미지의 크기는 size()
입니다. 그러나 이것은 비동기 호출입니다. 이 gmStream
은 스위치 아래에 표시된 stream()
에 사용되지 않습니다. 그러나
function manipulate (method, param) {
return new Promise(function (resolve, reject) {
// Configure GridFS (gridfs-stream)
const gfs = Grid(
MongoInternals.defaultRemoteCollectionDriver().mongo.db,
MongoInternals.NpmModule
)
switch (method) {
case 'rotate':
gmStream = gm(readStream)
.rotate('#ffffff', param.rotate)
break
// ... some more cases ...
case 'resize':
gmStream = gm(readStream)
.size(function (err, size) {
if (!err && size.width >= 1000 && size.height >= 1000) {
gmStream.resize('1000').stream().pipe(writeStream) // <-- should use the stream call below, as there has to be done some DB manipulation...
}
})
break
}
// resize case should also use this part...
gmStream
.stream(function (err, stdout, stderr) {
gfs.findOne({ _id: sourceId }, function (err, file) {
const writeStream = gfs.createWriteStream({
metadata: { }
})
writeStream.on('close',
function (newFile) {
resolve(newFile)
}
)
stdout.pipe(writeStream)
})
})
})
}