我在通过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模块的每一个错误,但我所做的一切到目前为止,试图“安装”它似乎没有工作,所以任何建议,这将是非常感谢.谢谢.
2条答案
按热度按时间fiei3ece1#
我可以看到here,ImageMagick已经安装了Cloud Functions环境,但GraphicsMagick没有。
如果你尝试了以上所有方法都没有成功,你可以上传你自己的GraphicsMagick编译的二进制文件沿着你的Cloud Function,并使用类似
child_process.exec
的东西在你的代码中执行它。你的二进制文件必须为你的目标平台编译,我相信this就是你要找的。然后,
index.js
中的代码应如下所示:idfiyjo82#
ImageMagick在Google Cloud Platform升级后不再可用。他们将Ubuntu从18.04版升级到了Ubuntu 22.04版。正如您在此版本包含的软件包列表中所看到的:System Packages Included in Cloud Functions ImageMagick不再可用!
我对此也感到非常失望,并正在寻找解决办法。
你可以在Google IssueTracker上投票,让这个问题对他们的团队来说更重要。我也投了赞成票!你可以在这里投票:IssueTracker