Обрезать изображение с резкой, используя оригинальный размер и поток - PullRequest
0 голосов
/ 07 ноября 2018

Я разрабатываю приложение, в котором пользователь загружает аватар на сервер, а затем ему предлагается обрезать изображение. Все, что мне нужно, это получить размер изображения из потока и затем обрезать его в процентах.

Это мой текущий код, но он пока не работает:

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 голосов
/ 16 мая 2019

Я получаю Размер изображения из библиотеки средства выбора изображений, а размер получен из Multer.

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

Я использую это для сжатия моего изображения без обрезки. размерность ширина и высота , в которой я хочу сжать изображение. _image - буфер изображения, который я хочу сжать с помощью этой функции я получаю сжатое изображение

...