使用 nodejs 的 GraphicsMagick 未返回正确的图像

GraphicsMagick using nodejs not returning correct image

我正在使用 GraphicsMagick。

这是图片:

https://hbr.org/resources/images/article_assets/hbr/1405/F1405A_A.gif

我用来裁剪的:

我的代码在这里:

 gm(request(url), "myimage.jpeg")
    .resize(270, 270, '^')
    .gravity('Center')
    .quality(50)
    .crop(270,270)
    .compress('JPEG')
    .flatten()
    .stream(function (err, stdout, stderr) {
            if (err)
                console.log(err);
            else {
                //upload the file
                file.uploadFileFromGm(fileDetails, stdout, cb);
            }
        });

代码运行良好。

但是我得到了一张透明图片,左边是空的。

我得到了下面的图片:

为什么白色背景在透明部分不起作用?知道如何解决这个问题吗?

您的输入图像是 GIF 并且具有透明度。您的输出文件 JPEG 不支持透明度,因此 GraphicsMagick 将透明像素渲染为黑色 - 默认背景颜色。

你有两个选择:

  1. 将您的图像存储为 GIFPNG 可以表示透明度

  2. 将背景颜色更改为纯(非透明)白色并存储为 JPEG

您选择哪一个取决于where/how您打算使用图像以及图像背后的背景是否必须在您要使用它的地方可见。

你需要这样的东西吗?

http://www.w3docs.com/tools/image-optimiser/