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