画像のサイズ変更とトリミング、アスペクト比の維持 NodeJS & gm 質問する

画像のサイズ変更とトリミング、アスペクト比の維持 NodeJS & gm 質問する

NodeJS のパッケージを使用してサムネイルを作成しようとしましたgmが、うまくいきませんでした。600 x 600 より大きい画像のサイズを変更する必要があります (指定された幅/高さから任意の幅/高さにすることができます)。しかし、サイズを gm に渡すと、要求したサイズとは異なる画像が作成されます。

たとえば、このコードを実行すると、node app /path/to/image.pngサイズが 200x100 の画像が返されると思いますが、実際には 180x100 や 200x90 などの画像が返されます...

gm(fileLocation)
    .thumb(200, 100, 'processed.' + process.argv[2].split('.').pop(), function() {
        console.log("Done!");
    });

サイズ変更オプションも試してみました。サイズを強制するオプションもありますが、出力のアスペクト比がひどくなってしまいます...

gm('/path/to/image.jpg')
    .resize(353, 257)
    .write(writeStream, function (err) {
         if (!err) console.log(' hooray! ');
    });

ベストアンサー1

モジュールを使用して、中心重心でサイズ変更およびトリミングされた画像を実現するにはgm、次のようなものを使用できます。

gm('/path/to/image.jpg')
  .resize('200', '200', '^')
  .gravity('Center')
  .crop('200', '200')
  .write(writeStream, function (err) {
    if (!err) console.log(' hooray! ');
  });

'^'関数の引数はGraphicsMagickresizeに高さと幅を最小デフォルトの動作の代わりに、最大結果として得られるサイズ変更された画像の幅はまたは高さは指定された寸法になりますが、不適合寸法は指定されたサイズよりも大きくなります。

thengravity関数は、GraphicsMagick に次のcrop関数がどのように動作するかを指示し、画像を最終サイズにトリミングします。

モジュールで使用される GraphicsMagick オプションの詳細なドキュメントは、gm以下で参照できます。http://www.graphicsmagick.org/GraphicsMagick.html

おすすめ記事