2017-01-03 2 views
0

일부 이미지를 다운로드하고 크기를 조정하고 압축 한 다음 스트림을 사용하여 엔드 포인트에서 제공하려고합니다. 크기를 조정할 때는 sharp, 지퍼를 만들 때는 archiver을 사용하고 있습니다. 나는이 패키지들을 그들 만의 것이 아니라 함께 사용할 수있다.아카이버 및 샤프를 사용하여 이미지 스트림 크기 조정 및 압축

는 여기에 몇 가지 예제 코드입니다 :와

const Hapi = require('hapi'); 
const archiver = require('archiver'); 
const sharp = require('sharp'); 
const request = require('request'); 

function foo() { 
    return new Promise((resolve, reject) => { 
    const imageStreams = [request('http://i.stack.imgur.com/tKsDb.png'), request('http://i.stack.imgur.com/EdUwb.png'), request('http://i.stack.imgur.com/5d55j.png')] 

    const zip = archiver('zip'); 
    zip.on('error', e => console.log('zip error: ', e.message)); 
    zip.on('entry', entry => console.log('appended ', entry.name)); 

    resolve(zip); 

    process.nextTick(() => { 
     console.log('number of streams: ', imageStreams.length); 

     imageStreams.map((stream, j) => { 
     const resize = sharp().resize(100, 100); 

     return stream.pipe(resize); 
     }) 
     .forEach((resizedImageStream, i) => { 
     console.log('appending ', i, ' to zip'); 
     zip.append(resizedImageStream, { name: `${i}.png` }); 
     }); 

     console.log('finalizing zip'); 
     zip.finalize(); 
    }); 
    }); 
} 

const server = new Hapi.Server(); 
server.connection({port: 3000}); 

server.route({ 
    method: 'GET', 
    path: '/', 
    handler: (request, reply) => { 
    foo().then(zip => reply(zip)); 
    } 
}) 
server.start(); 

실행을 : npm init --yes && npm install hapi archiver sharp request && node index.js

이 응답에 zip 파일을 스트리밍 할 수 없게됩니다 http://localhost:3000에서 엔드 포인트를 작성합니다.

다음은 각각의 다운로드 작업을 할 것입니다

: 날카로운 변환

  • ImageMagick를 스트림
  • 만 하나의 이미지를 처리 ​​날카로운 교체를 제거

    • 을, 즉 imageStreams.slice(0, 1)

    그러나 동시에 여러 이미지로 작업하고 크기를 조정할 수 없습니다.

  • 답변

    0

    이것은 예리한 라이브러리에서 버그로 판명되었고, 이제 수정되었습니다. here

    관련 문제