MagickNetで画像の回転と画像フォーマットの変更をしよう

前回のMagickNetことはじめに続いて、画像を回転させてみましょう。

あ、あけましておめでとうございます。今年もよろしくお願いします。

前回はリサイズで20%のサイズにしました。
今回はそれに加えて画像を45°傾けてみましょう。

とりあえずjpegのままで保存します。
コードとしては以下のように前回のコードにRotateが追加されただけです。
これに傾けたい度数をdoubleで与えてあげるだけで画像が傾きます。

                image.Rotate(45d);

サンプル:

            var path = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "sample.jpg");
            using (var image = new MagickImage(path))
            {
                //リサイズ他にもスケールする%を渡したりなど、いろいろできる。
                image.Resize(387, 518);
                //ついでに45度傾けてみようか
                image.Rotate(45d);

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

            }

でできるのが以下の画像
45°傾けたので、全体のサイズが大きくなり、新しくできた背景の部分は白くなっています。(わかりやすくするためにブログの背景を一部、黒にしています)

sample-mini-rotate45

できれば、新しくできた背景は透過にしたいので、pngに変換して保存してみます。
変換するときは、以下のようにFormatプロパティに変換したいファイルフォーマットを指定するだけです。

                //pngを指定するよ
                image.Format = MagickFormat.Png;

サンプル:

            var path = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "sample.jpg");
            using (var image = new MagickImage(path))
            {
                //リサイズ他にもスケールする%を渡したりなど、いろいろできる。
                image.Resize(387, 518);
                //ついでに45度傾けてみようか
                image.Rotate(45d);

                //pngを指定するよ
                image.Format = MagickFormat.Png;

                var outputPngPath = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "sample-mini-rotate45.png");
                image.Write(outputPngPath);

            }

で以下のようにPNGで保存されています。
が、新しい背景の部分は依然白いままです。
無駄にファイルサイズだけ大きくなった感じですね。

sample-mini-rotate45

ではちゃんと回転後新しい領域が透過になるようにしてみます。
こちらも簡単で、回転等の操作をする前にBackgroundColorプロパティにMagickColor.Transparentを指定するだけです。

                image.BackgroundColor = MagickColor.Transparent;

サンプル:

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

                //背景色を透過に設定しておく
                image.BackgroundColor = MagickColor.Transparent;

                //ついでに45度傾けてみようか
                image.Rotate(45d);

                //pngを指定するよ
                image.Format = MagickFormat.Png;

                var outputPngPath = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "sample-mini-rotate45-transparent.png");
                image.Write(outputPngPath);

            }
sample-mini-rotate45-transparent

次はちゃんと新しい領域が透過された画像になりました。

というわけで、今回は画像の回転と画像フォーマットの変更を合わせて説明してみました。
このように、簡単に使えるのがよいところですね。

Share