1. ホーム
  2. image

[解決済み] Node.js: ImageMagick を使わずに画像のリサイズを行う。

2023-03-16 15:26:30

質問

Node.js (+ express 4)で、ユーザーがサーバーにアップロードしてプロフィール画像を設定できるウェブアプリを開発しています。私たちはすでにファイルの mimetype と最大ファイルサイズを制限しており、ユーザーは 200KB 以上の png または jpeg 画像をアップロードすることができません。

問題は、ページの読み込みを向上させ、ディスクのスペースを節約するために、アップロードされた画像の解像度を 200x200 にリサイズ (サーバー側) したいということです。いくつかの調査の後、すべての回答は ImageMagick または GraphicsMagick に基づいた任意のモジュールを使用することを指摘しました。

しかしながら、単純な画像のリサイズを行うためにImageMagick/GraphicsMagickをインストールしなければならないことは、私にとってあまりにも過剰なことのように思われます。

編集してください。 受理された解決策を シャープ に変更しました。以前の解決策(lwip)はもう保守されていません。すべてのフィードバックに感謝します。

どのように解決するのですか?

私は、次のように投票します。 シャープ :

sharp('input.jpg')
  .resize(200, 200)
  .toFile('ouput.jpg', function(err) {
    // output.jpg is a 200 pixels wide and 200 pixels high image
    // containing a scaled and cropped version of input.jpg
  });

速いんです。 imagemagickベースの最速ノードバインディングよりも6倍速いです。 で、非常に少ないメモリで動作します。 おそらく10倍以下 へのシャープなリンク。 libvips を直接リンクします。外部プログラムへのシェルアウトが不要で、ライブラリ自体も *magick よりも高速かつ効率的にこのタスクを実行できます。ストリーム、バッファ、ファイルシステムの入出力、色管理、透明度、プロミス、オーバーレイ、WebP、SVG などの便利な機能をサポートしています。

シャープ0.20では、npmはほとんどのプラットフォームでコンパイル済みの完全なバイナリを自動的にダウンロードするので、node-gypは必要ありません。入力するだけです。

npm install sharp

または

yarn add sharp

そして、お出かけください。