使用原始尺寸和流来裁剪图像

时间:2018-11-07 13:54:15

标签: javascript node.js amazon-s3 sharp

我正在开发一个应用程序,其中用户将头像上传到服务器,然后要求他裁剪图像。我所需要做的就是从流中获取图像大小,然后按百分比裁剪。

这是我当前的代码,但到目前为止无法正常工作:

router.use('/', (req, res) => {
  //Crop parameters, these will be providen by user directly
  const parameters = {
    left: 0.5, //crop from left percentage
    top: 0.2, //crop from top percentage
    size: 0.5 //size percentage (extracted from width)
  }
  const fileStream = s3.getObject({
    Bucket: '<my-bucket-name>',
    Key: fileKey
  }).createReadStream();

  let imageInfo;

  const infoTransformer = sharp().on('info', info => {
    imageInfo = info;
  })

  const cropTransformer = sharp().extract({
    left: parameters.left * imageInfo.width,
    top: parameters.top * imageInfo.height,
    width: parameters.size * imageInfo.width,
    height: parameters.size * imageInfo.width
  });

  return fileStream.pipe(infoTransformer).pipe(cropTransformer).pipe(res);
})

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

我正在从图像选择器库中获得图像尺寸,并且尺寸是从混合器中获得的。

  _imageCompressor = (_image, dimension) => {
        const { width, height } = dimension
        const modifiedImage = sharp(_image)
            .resize(Math.trunc(width), Math.trunc(height))
            .toBuffer()
        return modifiedImage
    }

我正在使用它来压缩我的图像而不裁剪它。 尺寸是要在其中压缩图像的宽度高度 _image 是我要压缩的图像缓冲区 使用此功能,我正在压缩图像