MagickNetことはじめ

What’s MagickNet.

MagickNetは画像処理ライブラリとして有名なImageMagickのC++ API Magick++をラッピングしてManaged Objectとして.NET Framework上で利用できるようにしたものです。

Getting Started.

NuGet Galleryに登録されているので、そこから利用することが可能となっていますが、色の分解能、アプリケーションが32bitか64bitによって以下の4種類に分けられています。
16bit per pixelは8bit per pixelのものよりリソースを余分に使います。

16bit per pixel

  • (x86向け)Magick.NET-Q16-x86
  • (x64向け)Magick.NET-Q16-x64

8bit per pixel

  • (x86向け)Magick.NET-Q8-x86
  • (x64向け)Magick.NET-Q8-x64

では、使ってみましょうか。
適当な画像をリサイズして保存するというところまで行ってみたいと思います。

以下の画像の原寸が1936 × 2592で、これを0.2倍の387×518のサイズにリサイズします。
IMG_0619

追記ここから
利用するためには、以下が必要です。
Visual C++ Redistributable for Visual Studio 2012 Update 4

ここまで
Visual Studio 2013を起動し、適当なコンソールアプリのプロジェクトを新規作成し、Package Manager Consoleから

PM> Install-Package Magick.NET-Q16-x86

と入力します。上記パッケージ名は自分の環境に合わせて指定してください。

‘Magick.NET-Q16-x86 6.8.7.901’ をインストールしています。
‘Magick.NET-Q16-x86 6.8.7.901’ が正常にインストールされました。
‘Magick.NET-Q16-x86 6.8.7.901’ を MagickNetSample に追加しています。
‘Magick.NET-Q16-x86 6.8.7.901’ が MagickNetSample に正常に追加されました。

となったら、インストール成功です。

上記の原寸画像を一旦ダウンロードし、デスクトップにsample.jpgという名前で保存します。

Magick.NetはImageMagick名前空間の下に実装されていますので、以下のようにusingしておきます。

using ImageMagick;
namespace プロジェクト名
{

では実際に画像を読み込んでみます。
いろいろ設定がありますが、今回はシンプルな実装でとりあえず事始めしてみたいと思います。

Magick.Net上での画像処理はすべてMagickImageクラスをベースとして行っていきます。
もちろん、UnmanagedなリソースをラップしているのでDisposableです。
ので、usingでくくるかたちでインスタンスを生成します。
MagickImageのコンストラクタにファイルのパスを渡すと、そのファイルを読み込んでMagickImageインスタンスを生成してくれます。
(他にもバイト配列を読み込んだり、読み込むときの設定を一緒に渡したりとかもできる)

            var path = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop),"sample.jpg");
            using (var image = new MagickImage(path))
            {
            }

これで、MagickImageインスタンスが生成されたので、次にリサイズして保存してみます。
とりあえず保存先は、プロジェクトのルートでsample-mini.jpgという名前にしてみましょう。

                //リサイズ他にもスケールする%を渡したりなど、いろいろできる。
                image.Resize(387, 518);

                var outputPath = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "sample-mini.jpg");
                //これで保存
                image.Write(outputPath);

これで、デスクトップに以下のような画像ができていると思います。
原寸が387×518になっています。
sample-mini

コード全体

using System;
using ImageMagick;
namespace MagickNetSample
{
    class Program
    {
        static void Main(string[] args)
        {
            var path = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop),"sample.jpg");
            using (var image = new MagickImage(path))
            {
                //リサイズ他にもスケールする%を渡したりなど、いろいろできる。
                image.Resize(387, 518);

                var outputPath = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "sample-mini.jpg");
                //これで保存
                image.Write(outputPath);
            }
        }
    }
}

今回はことはじめということで、使えるようになるまでと、簡単なサンプルで実際に使ってみるところまでやってみました。

ハマりどころもなくはないのですが、ImageMagickでできることは基本できるし、ImageMagickのAPIがほぼそのままラップされているので、メソッド名のイメージがつきやすかったりします。
実際に、新しい何かをしたいときはImageMagickのWeb上のリソースが案外役に立ったりします。
System.Drawingでの画像処理に疲れたらMagick.Netを検討してみるのも良いのではないでしょうか?

Share