シェイプ画像で画像をトリミングしようとしていて、これを試しました
let imageDoc = gm(filePath).resize(100, 100);
imageDoc.mask(`${shapesPath}/hexagon.svg`);
何も行われていないように動作しますが、正しくサイズ変更されます。また、svg の代わりに png ファイルを使用してみましたが、結果がまったくありません。デバッグする方法があるのでしょうか、それとも何か間違っていますか?
シェイプ画像で画像をトリミングしようとしていて、これを試しました
let imageDoc = gm(filePath).resize(100, 100);
imageDoc.mask(`${shapesPath}/hexagon.svg`);
何も行われていないように動作しますが、正しくサイズ変更されます。また、svg の代わりに png ファイルを使用してみましたが、結果がまったくありません。デバッグする方法があるのでしょうか、それとも何か間違っていますか?
ユーザーピリジャンによると:
マスクはそれ自体では何もしません。実際にはかなり役に立ちません。提供されたマスク画像を取得し、それを使用して、画像に対して追加の処理/描画が実行された場合に、マスクされたピクセルをその後の変更から書き込み保護します。
したがって.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 が呼び出す正確なコマンドが出力されます。