标签归档:sharp

[node.js]同时使用canvas模块和sharp模块出现“The specified procedure could not be found”错误

升级到最新的node之后这俩模块是彻底没法共存了,之前还能通过降级其中一个模块来兼容一下,现在我怎么试都没法成功运行了,于是尝试找解决方案。

然后我发现这是由于两个模块使用的同名链接库不兼容导致的其中一个模块报错,似乎就是个无解的问题,偶然发现一个替代方案:https://github.com/Brooooooklyn/canvas

如果本来只使用了标准的绘制功能,那么可以连代码都不用改,直接替换掉依赖就可以解决问题,如果使用了非标准canvas方法,那么可能需要做一些小修改,比如将图片导出为png等格式时的额外参数之类的情况。

基本上要进行的操作就是删除`package.json`中的`canvas`依赖那行,然后直接执行`npm i @napi-rs/canvas`,npm就会自动删除`canvas`模块并安装`@napi-rs/canvas`,然后把代码中的`require(“canvas”)`换成`require(“@napi-rs/canvas”)`即可。

[Node.js]sharp模块处理图片方向错误

这篇博文是对于该模块https://www.npmjs.com/package/sharp的笔记,这是一个nodejs上用于处理图片的模块。

遇到的问题是该模块处理手机拍摄的照片时(带有EXIF方向信息的图片),不会自动按照该图的EXIF信息先旋转图片到正确的方向再进行处理,导致处理完的图片会转向错误的方向。

然后我翻了一下API文档里的rotate部分,光看第一行就可以知道这并不是一个bug:

rotate the output image by either an explicit angle or auto-orient based on the EXIF `Orientation`  tag.

如果调用rotate时不带参数的话会根据EXIF信息的方向进行旋转,也就是说它是特意默认不自动旋转的,要解决这个问题只要在调用所有处理函数之前先调用一个没有参数的`rotate()` 即可。

比如

sharp(图片路径)
.rotate()
.resize(200, 200)
.jpeg({quality:90}).toBuffer();