Firebase/Google Cloud函数“无法执行GraphicsMagick/ImageMagick”

zvms9eto  于 2023-03-31  发布在  Go
关注(0)|答案(2)|浏览(184)

我在通过Google的Firebase平台部署的Node 14云函数中运行GraphicsMagick脚本时遇到了一个问题。
"我想做的事"
在我们的平台上,当用户上传PDF文件时,我们需要存储每个页面的PNG副本,以便在前端显示(当一个PNG项目命中的桶,缩略图也会生成,以保存带宽和加载时间).用户上传一个PDF文件,当它命中桶时,触发云函数,该云函数使用pdf-page-counter库来计算在进入要循环通过的Map之前有多少页。在循环内部,我们可以访问PDF中的当前页面i。然后我使用pdf2pic库将PDF页面转换为PNG图像,但这就是问题发生的地方。

云函数中的pdf 2 pic代码

下面是云函数中的代码,我不认为这是问题所在,更多的是在云函数环境中找不到GraphicsMagick/Imagemagick模块的事实:

// Establish some options to pass into the pdf2pic conversion
const baseOptions = {
   width: 2550,
   height: 3300,
   density: 330,
   savePath: tempNewPath,
};
// Call the fromPath method with the file location and base options 
const convert = fromPath(tempFilePath, baseOptions);
// Convert the pdf page to an image
await convert(pageNumber);

运行上述代码时出现的错误

Error: Could not execute GraphicsMagick/ImageMagick: gm "convert" "-density" "330x330" "-quality" "75" "-[0]" "-resize" "2550x3300!" "-compress" "jpeg" "/tmp/YgGxvF9IxXAdJTOH4HTT.png/untitled.1.png" this most likely means the gm/convert binaries can't be found

我已经尝试过

  • 还有另一个关于这个主题opened here的问题,但是当我尝试在那里描述的修复时,它并没有给我带来多大的成功。
  • 我将gm库到npm install gm包含在我的函数目录中,并部署到firebase,但仍然没有成功。
  • 将函数运行时从节点10升级到节点14
  • 根据pdf 2 pic库要求设置ghostscript

所以你可以告诉我,我是在一个死胡同种.这个问题对我来说似乎云函数不能找到GraphicsMagick模块的每一个错误,但我所做的一切到目前为止,试图“安装”它似乎没有工作,所以任何建议,这将是非常感谢.谢谢.

fiei3ece

fiei3ece1#

我可以看到here,ImageMagick已经安装了Cloud Functions环境,但GraphicsMagick没有。
如果你尝试了以上所有方法都没有成功,你可以上传你自己的GraphicsMagick编译的二进制文件沿着你的Cloud Function,并使用类似child_process.exec的东西在你的代码中执行它。你的二进制文件必须为你的目标平台编译,我相信this就是你要找的。
然后,index.js中的代码应如下所示:

const { exec } = require("child_process");

exec("[YOUR_IMAGEMAGICK_COMMAND]", (error, stdout, stderr) => {
  //You can check outputs.
  console.log(stderr);
});
idfiyjo8

idfiyjo82#

ImageMagick在Google Cloud Platform升级后不再可用。他们将Ubuntu从18.04版升级到了Ubuntu 22.04版。正如您在此版本包含的软件包列表中所看到的:System Packages Included in Cloud Functions ImageMagick不再可用!
我对此也感到非常失望,并正在寻找解决办法。
你可以在Google IssueTracker上投票,让这个问题对他们的团队来说更重要。我也投了赞成票!你可以在这里投票:IssueTracker

相关问题