透明度清除Imagemagick无法使用展平方法

时间:2018-07-13 01:08:59

标签: image-processing imagemagick magick++

我正在尝试使用ImageMagick删除透明度。以下命令适用于大多数图像,但并非全部。在少数情况下会弄乱图像。 “-删除alpha”解决了问题,但我不知道如何在Magick ++代码中做到这一点。我正在使用以下命令,该命令无法处理少量图像。随附一个样本。

命令:convert -flatten -background white a.png a-removeTransparency.jpg

original image

2 个答案:

答案 0 :(得分:1)

中的示例看起来像...

#include <Magick++.h>
#include <vector>

int main(int argc, const char * argv[]) {
    std::vector<Magick::Image> images;
    Magick::Image input, output;
    // Create example image
    input.size(Magick::Geometry(100, 100));
    input.read("GRADIENT:GREEN-TRANSPARENT");
    // Set background color
    input.backgroundColor(Magick::Color("RED"));
    // Add image to list
    images.push_back(input);
    // Perform flatten operation
    Magick::flattenImages(&output, images.begin(), images.end());
    // Safe to disk
    output.write("output.png");
    return 0;
}

这将转换图像为...

input

output

要理解的关键是Magick ++具有 Standard Template Libary 和许多辅助方法,并且大多数方法都希望图像列表( vector )起作用。如果在Magick::Image类上找不到所需的内容,则STL可能已经结束。

答案 1 :(得分:0)

Imagemagick中正确的命令是将-background这样的设置放在-flatten这样的运算符之前。更重要的是,请先阅读输入内容。这在IM 7中更为重要。IM6更宽容。所以尝试

convert a.png -background white -flatten removeTransparency.jpg