Сохранять метаданные поворота с резким node.js - PullRequest
0 голосов
/ 19 июня 2020

Я работаю над приложением, которое использует https://sharp.pixelplumbing.com/ резкость для обработки фотографий. В настоящее время, когда мы изменяем размер и затем записываем в буфер изображение с резким изменением размера и toBuffer, по умолчанию они оба стирают данные EXIF. Мы хотим удалить все метаданные, кроме ориентации (если она существует).

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

Исходная строка кода:

await this.sharpInstance.resize(maxDimension, maxDimension).max().toBuffer()

Я думаю, что мне нужно что-то вроде

await this.sharpInstance.withMetadata().resize(maxDimension, maxDimension).max().withMetadata().toBuffer()

но только для метаданных ориентации.

Я был бы очень признателен за помощь в решении этой проблемы. Большое спасибо!

1 Ответ

1 голос
/ 19 июня 2020

Вы пробовали await this.sharpInstance.resize(maxDimension, maxDimension).max().withMetadata().toBuffer() как Sharp docs около withMetadata.

Отредактировано:

Я понял. Как и withMetadata, сначала нам нужно сохранить метаданные ориентации, а затем назначить их в выходной буфер позже:

// First, save the orientation for later use
const { orientation } = await this.sharpInstance.metadata();

// Then output to Buffer without metadata
// then create another Sharp instance 
// from output Buffer which doesn't have metadata
// and assign saved orientation along with it
sharp(this.sharpInstance.toBuffer())
    .withMetadata({ orientation }).toBuffer();
...