0

ImageMagick (6.8.8-7) を使用して SVG 画像を読み取り、有効な透明ピクセルを取得しようとしています。

以下のコードは PNG 形式でうまく機能しますが、SVG の場合は白い背景しか持てません。だから私は MagickSetBackgroundColor と MagickSetImageBackgroundColor をいくつかのマージ レイヤーで追加しようとしましたが、まだ機能させることはできません。

PoC からの抜粋:

MagickWandGenesis();
m_wand = NewMagickWand();

MagickReadImage(m_wand, file_name);

hasAlfa = MagickGetImageAlphaChannel(m_wand);
fprintf(stderr, "alpha channel detection: %d\n", hasAlfa);

if (hasAlfa == MagickTrue) {

    PixelWand *color;
    MagickWand *new_wand;

    imagedata = malloc(w*h*4);

    color = NewPixelWand();
    PixelSetColor(color, "none");
    MagickSetBackgroundColor(m_wand, color);

    MagickSetImageBackgroundColor(m_wand, color);
    new_wand = MagickMergeImageLayers(m_wand, MergeLayer);
    DestroyMagickWand(m_wand);
    m_wand = new_wand;

    mrc = MagickExportImagePixels(m_wand, 0, 0, (size_t)w, (size_t)h, "RGBA", CharPixel, imagedata);

    fprintf(stderr, "R:%d G:%d B:%d A:%d\nR:%d G:%d B:%d A:%d\n", imagedata[0], imagedata[1], imagedata[2], imagedata[3], imagedata[4], imagedata[5], imagedata[6], imagedata[7]);
}

PNG 画像を使用した結果:

size: 9 x 11
alpha channel detection: 1
R:0 G:0 B:0 A:0
R:0 G:0 B:0 A:0

SVG 画像を使用した結果:

size: 640 x 1000
alpha channel detection: 1
R:255 G:255 B:255 A:255
R:255 G:255 B:255 A:255

手がかりはありますか?

4

1 に答える 1

0

私はあなたの質問を理解しました。透明度を svg から png に変換するには、ピクセルを透明として定義する必要があります。「不透明度」を使用してsvgで透明度を定義できますが、svgでは透明度は次のレイヤーにのみ与えられます(アルファのようにすべてのオブジェクトを照らすアルファレイヤーではありません)。png でアルファ透明度が必要な場合は、それを定義 (つまり白) し、それをアルファ透明度に設定するのが本当に最善の方法です。

于 2014-10-05T21:09:25.937 に答える