使用ImageMagick和gm将buffer中任意格式图像转换为jpg的方法
缓冲区图像统一转JPG格式解决方案
你的核心需求是不限输入图像格式、全缓冲区操作输出JPG编码结果,原有代码的问题是没有正确指定输出格式的位置——你在in参数末尾加的jpg不会被识别为输出格式声明,gm处理缓冲区输出时只会读取toBuffer方法传入的格式参数来决定编码规则。
修正后的可运行代码如下:
gm(buf) .autoOrient() .resize('500x') .quality(92) .strip() // 首个参数指定输出格式为jpg,无需依赖实体文件路径 .toBuffer('jpg', (err, buffer) => err ? reject(err) : resolve(buffer))
注意事项
- 原代码重复设置了两次
quality参数,后定义的100会覆盖之前的92,按需保留其中一个即可 - 优先使用gm提供的链式API调用,比手动拼接
command、in参数更不容易出错,可读性也更高 - 如果你的gm依赖底层绑定的是ImageMagick而非原生GraphicsMagick,初始化时需要额外指定配置,避免格式识别失败:
const gm = require('gm').subClass({imageMagick: true})
内容的提问来源于stack exchange,提问作者vertige
相关产品推荐
相关产品推荐

