Firebase Cloud函数imagemagick复合命令以叠加图像

时间:2018-07-04 06:53:10

标签: firebase google-cloud-functions imagemagick-convert

我正在尝试使用Imagemagick on cloud函数将一个图像放置在另一图像上,并像这样查看Imagemagick命令:

  

转换a.png b.png-重心-复合result.png

我知道它在Firebase云功能中无法正常工作,因此我寻找了一个示例,并得到了以下内容:

return spawn('convert', [tmpFilePath, tmpFilePath2, '-gravity', 'center', '-composite', tmpFilePath3]);


我收到这样的错误:

  

ChildProcessError:convert /tmp/default.jpg /tmp/IMG_4947.JPG -gravity center -composite /tmp/newimage.jpg失败,代码为1

1 个答案:

答案 0 :(得分:2)

我刚刚尝试了您的代码,它可以工作。

首先导入操作系统和路径:

const os = require('os');
const path = require('path');

然后您可以声明tmp路径:

const filename1 = 'default.jpg';
const filename2 = 'IMG_4947.JPG';
const filename3 = 'destination.jpg';

const tmpFilePath = path.join(os.tmpdir(), filename1);
const tmpFilePath2 = path.join(os.tmpdir(), filename2);
const tmpFilePath3 = path.join(os.tmpdir(), filename3);

之后,您可以使用存储桶下载图像(如果没有,则可以从活动中获取图像)。

bucket.file(filename1).download({
            destination: tmpFilePath
        }).then(()=>{
            bucket.file(filename2).download({
                destination: tmpFilePath2
            }).then(()=>{
                return spawn('convert', [tmpFilePath, tmpFilePath2, '-gravity', 'center', '-composite', tmpFilePath3]);
            }).then(()=>{
                //Upload the image (bucket.upload(tmpFilePath3, ....)
            })
        }).catch(()=>{
            //error handling..
        });

也可以并行执行而不是顺序执行(Promise.all [a,b]代替then()。then())。