2016-04-06 9 views
0

ノード-gm + Imagemagickを使用してイメージを円形に切り抜こうとしました。Imagemagickを使用したノード-gm循環画像の切り取り

とにかく、黒い円を使ってマスクを作成しようとしました。

var original = 'app-server/photo.jpg'; 
var output = 'app-server/photo.png'; 
var maskPath = 'app-server/photo-mask.png'; 

gm(original) 
    .crop(233, 233,29,26) 
    .resize(80, 80) 
    .setFormat('png') 
    .write(output, function (err) { 
     console.log(err || 'cropped to target size'); 

     gm(output) 
      .out('-size', '80x80') 
      .background('black') 
      .drawCircle(20,20, 0, 0) 
      .toBuffer('PNG',function (err, buffer) { 

       console.log(err || 'created circular black mask'); 

       //docs say "a buffer can be passed instead of 
       //a filepath" but this is apparently false 
       //and say something unclear about using black/white colors for masking. 
       //I'm clearly lost 
       gm(output) 
       .mask(maskPath) 
       .write(output, function (err) { 
        console.log(err || 'applied circular black mask to image'); 
       }); 
      }); 

    }); 

は、私は、これは、いくつかの空想の文字列コマンドの連結を介して行うことができます確信しているが、画像処理の腕前の私の不足にもかかわらず、私はまだきれいなコードを維持したいです。私は、node-gm関数を使用して解決策を探しています。私の試行よりも少ない操作で実行することをお勧めします。

Iはまた、機能がない成功を収めて、このコマンドの呼び出しチェーンに試してみた:私は(Y、H、X、W)の特定の位置にトリミングする必要があるので、これらの解決策もドン https://stackoverflow.com/a/999563/1267778

注」私のためのtの仕事:

node-pngjs

node-circle-image

答えて

0

はそれを手に入れました!何時間も手抜きをして、私は必要なものを手に入れました。

gm(originalFilePath) 
    .crop(233, 233,29,26) 
    .resize(size, size) 
    .write(outputFilePath, function(err) { 
    gm(size, size, 'none') 
     .fill(outputFilePath) 
     .drawCircle(size/2,size/2, size/2, 0) 
     .write(output, function(err) { 
      console.log(err || 'done'); 
     }); 
    }); 

I)は、(ユーザがフロントエンドで画像をトリミングし、作物に(H、X、Y、W)座標を通過することを可能にするJCropを使用しています。