保持旋转元数据清晰 node.js

Keep rotation metadata with sharp node.js

我正在开发一个使用 sharp 处理照片的应用程序。 当前,当我们使用 sharp resize 和 toBuffer 调整大小然后写入缓冲图像时,默认情况下它们两者都会擦除 EXIF 数据。我们要删除除 orientation(如果存在)之外的所有元数据。

我读过 sharp 的文档,withMetadata 似乎是实现我想要的目标的候选者,问题是 withMetadata 保留了所有元数据,我只想要 orientation原图。

原来的代码行是

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

我觉得我想要的是这样的

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

但仅针对方向元数据。

如果能帮我解决这个问题,我将不胜感激。非常感谢!

你有没有试过 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();

对于那些对保留文件的原始旋转和旋转元数据不特别感兴趣的人的解决方法:旋转图像,使文件没有元数据,但旋转是正确的。

为此,不需要读取元数据,如果您调用不带参数的rotate()方法,它会在元数据中查找信息并执行适当的轮换。