0

シェイプ画像で画像をトリミングしようとしていて、これを試しました

let imageDoc = gm(filePath).resize(100, 100);

imageDoc.mask(`${shapesPath}/hexagon.svg`);

何も行われていないように動作しますが、正しくサイズ変更されます。また、svg の代わりに png ファイルを使用してみましたが、結果がまったくありません。デバッグする方法があるのでしょうか、それとも何か間違っていますか?

4

1 に答える 1

2

ユーザーピリジャンによると:

マスクはそれ自体では何もしません。実際にはかなり役に立ちません。提供されたマスク画像を取得し、それを使用して、画像に対して追加の処理/描画が実行された場合に、マスクされたピクセルをその後の変更から書き込み保護します。

したがって.mask()、別のコマンドと一緒に使用する場合にのみ役立つようです。

GraphicsMagick のドキュメントは非常に紛らわしく、画像をマスクする方法は複数あると思います。これが私がそれを行う方法です:

function mask(img, mask){
    gm()
    .command("composite")
    .compose("CopyOpacity")
    .in(img, mask, "-matte")
    .write(img, function(err){
        if(err){
            console.log(err)
        } else {
            console.log("Success! Image " + img + " was masked with mask " + mask);
        }
    });
}

ただし、これは のアルファ チャネルを使用せずmask代わりにアルファ チャネルのない白黒マスクで動作します。また、 と の両方が同じ寸法である必要がありimgますmask

mask各ピクセルの値を のアルファ チャネルにコピーすることで機能しますimg。この-matteオプションは、まだアルファ チャネルimgがない場合にアルファ チャネルを作成するように gm に指示します。

node-gm はvisionmedia のデバッグ ライブラリをDEBUG=gm使用するため、(Unix/OS X の場合) 次のように環境変数を設定することで、コンソールへのデバッグ出力をオンにすることができます。

DEBUG=gm node index.js

これにより、node-gm が呼び出す正確なコマンドが出力されます。

于 2016-08-31T13:42:57.987 に答える