【问题标题】:Resizing and zipping image streams using archiver and sharp使用归档器和锐化调整图像流的大小和压缩
【发布时间】:2017-01-03 17:42:47
【问题描述】:

我正在尝试下载一些图像,调整它们的大小,压缩它们,并使用流从端点提供服务。我使用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

这将在http://localhost:3000 创建一个端点,它将无法将 zip 文件流式传输到响应。

以下各项将使下载工作:

  • 删除急剧变换
  • 用 imagemagick-stream 替换Sharp
  • 仅处理单个图像,即imageStreams.slice(0, 1)

但我无法让它同时处理多个图像并调整大小。

【问题讨论】:

    标签: node.js node-archiver


    【解决方案1】:

    原来是sharp库的一个bug,现在已经修复here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-11
      • 2018-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多