You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在AWS Lambda中使用imagemin-pngquant报错:无法执行二进制文件

解决AWS Lambda中imagemin-pngquant无法执行二进制文件的问题

问题场景

在AWS Lambda函数中使用imagemin搭配imagemin-pngquant压缩PNG图片,代码如下:

// 压缩图片后上传
let converted_image = await imagemin.buffer(await image.data, {
    plugins: [
        imageminPngquant({
            quality: [.55, .65],
            speed: 8,
            strip: true
        })
    ],
})

执行时报错:

Error: Error: /var/task/node_modules/pngquant-bin/vendor/pngquant: /var/task/node_modules/pngquant-bin/vendor/pngquant: cannot execute binary file

核心原因

pngquant-bin默认根据本地开发环境(比如Mac/Windows)下载对应架构的二进制文件,但AWS Lambda运行的是Amazon Linux 2 x64环境,本地的二进制文件无法在该环境下执行。

解决步骤

1. 重新安装适配Lambda环境的依赖

在项目根目录执行以下命令,强制npm下载适配Linux x64架构的pngquant二进制包:

npm_config_platform=linux npm_config_arch=x64 npm install imagemin-pngquant --save

2. 精简代码冗余

代码中await image.data是多余操作——axios以arrayBuffer类型请求返回的image.data本身就是Buffer,无需额外await。修改后的代码:

// 压缩图片后上传
let converted_image = await imagemin.buffer(image.data, {
    plugins: [
        imageminPngquant({
            quality: [.55, .65],
            speed: 8,
            strip: true
        })
    ],
})

3. 备选方案:用Lambda层封装依赖

如果上述方法无效,可以将依赖打包成Lambda层:

  • 新建空目录,执行npm init -y初始化项目
  • 用第一步的命令安装依赖
  • 将node_modules目录打包成zip文件
  • 在AWS控制台上传该zip作为Lambda层,并关联到你的函数

验证

部署修改后的代码到Lambda,测试PNG压缩功能,即可确认报错是否解决。

内容的提问来源于stack exchange,提问作者Joel Hager

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 00:01:18