【问题标题】:Firebase generate circle thumbnail fail with code 1Firebase 生成圆形缩略图失败,代码为 1
【发布时间】:2019-04-26 11:21:48
【问题描述】:

我尝试使用 ImageMagick 通过 Cloud Functions 将图像上传从 My App 转换为 Firebase。

return spawn("convert", [
    tempFilePath,
    "(",
    "-size", 
    dim + "x" + dim, 
    "xc:black",
    "-fill",
    "white",
    "-draw",
    "\"circle",
    dim2 + "," + dim2,
    dim2 + "," + dim1+"\"",
    ")",
    "-alpha",
    "off",
    "-gravity",
    "center",
    "-compose",
    "copy_opacity",
    "-composite",
    "-crop",
    dim+"x"+dim+"+0+0",
    "-thumbnail",
    "300x300>",
    tempFilePathPNG
  ]); 

dimdim2 是我的特定维度。但是当我使用该功能时,会出现错误,我不知道如何。您可以查看下面的图片。

`convert /tmp/7eee6327-8b7a-41f8-a1a2-19bbc3f297c2.jpg ( -size 2592x2592 xc:black -fill white -draw "circle 1296,1296 1296,2591" ) -alpha off -gravity center -compose copy_opacity -composite -crop 2592x2592+0+0 -thumbnail 300x300> /tmp/7eee6327-8b7a-41f8-a1a2-19bbc3f297c2.png` failed with code 1

我也尝试其他生成,例如 resizedraw image,它成功了。但是上面的代码总是失败。请帮我。

【问题讨论】:

  • 您的路径包含 - 并且可能会混淆 Imagemagick。尝试将路径包含在“”中,我建议从简单的东西开始 - 一个具有固定值的普通圆圈,当它起作用时展开它。
  • 括号两边必须有空格。您的代码是否提供该间距?
  • 我在imagemagick.online 中运行此代码,我得到了我所期望的。我也认为因为那个文件路径但是当我运行像生成缩略图这样的简单代码时,它很好。
  • 您需要转义括号。使用"\(" 而不是"("

标签: node.js firebase imagemagick google-cloud-functions


【解决方案1】:

我找到了解决办法!!! 我在下面的子承诺中将 spawn 转换为 exec 并且它可以工作。我还将双转义放在括号附近以使其工作。但我仍然想使用 spawn。

return new Promise((resolve,reject)=>{
        exec("convert "+tempFilePath+" \\( -size "+dim+"x"+dim+" xc:black -fill white -draw \"circle "+dim2+","+dim2+" "+dim2+","+dim1+"\" \\) -alpha off -gravity center -compose copy_opacity -composite -crop "+dim+"x"+dim+"+0+0 -thumbnail 300x300 "+tempFilePathPNG,(error,stdout,stderr)=>{
          if(error){
            console.log(error);
            reject(error);
            return;
          }
          resolve();
        })
      })

【讨论】:

  • 它使用spawn() 只转义括号一次而不是两次:await spawn('montage', args, {capture: ['stdout', 'stderr'] }) where args = [ ..... , '\( thumb.png -colorspace Gray \)', .....]
【解决方案2】:

由于卡玛不足而作为答案发布:

convert 期望文件名作为最后一个参数,或“-”以使用标准输出。 在您的情况下,最后一个参数是 300x300,因此转换会失败,如下所示: 转换:缺少图像文件名 `300x300'

尝试将“300x300>”替换为“300x300 - >”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多