スポンサーリンク

【C#】Magick.NETを使って画像を圧縮・リサイズする

Magick.NET を使って画像を圧縮(ファイルサイズを縮小)する方法をわかりやすく解説します。
これは主に以下のような処理を行うことで実現できます:

  • 画像の 品質(Quality)を落とす
  • 必要であれば リサイズ(解像度変更) する
  • PNG → JPEG などの フォーマット変換 も検討する

Magick.NETとは

以下で公開されいている、画像操作ライブラリです。このライブラリを使って画像の圧縮をしていきます。

GitHub:https://github.com/dlemstra/Magick.NET

インストール

Visual Studioのnugetの管理画面などで、インストールします。

パッケージはQ8、Q16、Q16-HDRIのような種類があります。
高品質な画像に対して精度を保って画像を読み書きできるが、その分メモリなどのリソースを消費するという違いがあります。

Q8<A16<Q16-HDRIの順で、精度の高い読み書きができます。
これらのどれかのパッケージをインストールします。

リサイズ・圧縮の実装方法

以下のような、コードで画像を圧縮・リサイズできます。

using (var image = new MagickImage("original.jpg"))
{
    // JPEG品質を指定(0~100)
    image.Quality = 60;

    // アスペクト比を維持せずに圧縮する場合はこの設定を入れる
    // var size = new MagickGeometry(100, 100);
    // size.IgnoreAspectRatio = true;

    // 横幅800pxにリサイズ(高さはアスペクト比を保つ)
    image.Resize(800, 0);

    image.Write("compressed.jpg");
}

JPEGの品質度の設定、画像幅、アスペクト比設定などの設定があり、目的に応じた圧縮・リサイズ方法がとることができます。

今回はファイルを指定してますが、Stream等の指定もできるようです。

参考

Magick.NETのGithubのドキュメントもしっかりしており、とても扱いやすいパッケージだと思いました。この記事では、画像圧縮について記載しましたが、それ以外の機能もあるようです。

GitHubドキュメント:https://github.com/dlemstra/Magick.NET/blob/main/docs/Readme.md

.NET
スポンサーリンク
シェアする
trelab