MagickNetで画像を切り取ってみよう

前回は、画像の回転と画像フォーマットの変更について説明しました。

今回は、画像を切り取ってみようと思います。

リサイズで20%にした画像を中心を軸に縦横半分ずつ残します。

リサイズしただけの画像
sample-mini

画像を切り取るときにはCropというメソッドを利用し、オーバーロードが3種類あります。

                
//重心を規定し、そこから縦横指定したサイズで切り取る
image.Crop(width, height, Gravity.Center);               
//中心を重心とし、そこから縦横指定したサイズで切り取る
image.Crop(width, height);               
//平面領域を指定し、そこを残す(下の例だと開始位置と、そこからのサイズを指定している)
image.Crop(new MagickGeometry(x,y,width,height));

上2つは基本的にはGravityによって指定された場所から切り取る指定方法となっている。

では実際に試してみましょう。
以下にそれぞれのサンプルを示します。
両方共結果はおなじになります。

重心を中心に指定して、そこから元サイズの半分ずつ残すサンプル

        private static void リサイズして中央から縦横半分ずつ切り取ってpngで保存()
        {
            var path = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "sample.jpg");
            using (var image = new MagickImage(path))
            {
                //リサイズ他にもスケールする%を渡したりなど、いろいろできるので今回は20%指定で
                image.Resize(0.2);

                //リサイズ後のサイズを取得
                var width = image.Width;
                var height = image.Height;

                //中心から半分ずつ残して画像を切り取る
                image.Crop(width / 2, height / 2, Gravity.Center);               
                
                //pngを指定するよ
                image.Format = MagickFormat.Png;

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

            }
        }

結果
sample-mini-cropGravity

領域を指定して切り取るサンプル

        private static void リサイズしてポジション指定で縦横半分ずつ切り取ってpngで保存()
        {
            var path = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "sample.jpg");
            using (var image = new MagickImage(path))
            {
                //リサイズ他にもスケールする%を渡したりなど、いろいろできるので今回は20%指定で
                image.Resize(0.2);

                //リサイズ後のサイズを取得
                var width = image.Width;
                var height = image.Height;

                //中心から半分ずつ残して画像を切り取る
                image.Crop(new MagickGeometry(width / 4, height / 4, width / 2, height / 2));


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

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

            }
        }

結果
sample-mini-cropGeometry

というように、ケースに応じて、指定方法を使い分けて画像を切り取ることができます。

というわけで今回は画像の切り取りについて説明してみました。

Share