目次→http://1studying.blogspot.jp/2017/07/c-magicknetmokuzi.html#kuw12
リサイズ
画像の拡大縮小を行います。
%でリサイズ
//%リサイズ myMagick.Resize(new ImageMagick.Percentage(50.0));
横%縦%でリサイズ
//横%縦%でリサイズ myMagick.Resize(new ImageMagick.Percentage(50.0), new ImageMagick.Percentage(100.0));
指定Pixel以下の画像にリサイズ(縦横比率は変更無し)
//指定Pixel以下の画像にリサイズ(縦横比率は変更無し) myMagick.Resize(500, 500);
サムネイル作成用リサイズ(高速縮小)
//サムネイル作成時の高速縮小用 //・「Thumbnail」は内部で以下の処理が自動で行う事により、 // サムネイルの作成を高速処理させます。 // 1)「myMagick.Strip()」Exif等の画像情報除去(但しICCプロファイルは削除しません) // 2)「myMagick.Sample(~)」画像をターゲットサイズの高さの5倍まで縮小 // 3)「myMagick.Resize(~)」画像をターゲットサイズへ縮小 myMagick.Strip(); myMagick.Thumbnail(100,100); //圧縮率(0低圧縮~100高圧縮)JpegやPngに対応 //myMagick.Quality = 0;
高速リサイズ(通常は使用しない)
//高速リサイズ(通常は使用しない) //「Resize」を簡略化、高速化版。「ピクセル平均化で縮小」あまり使用しません。 //(200%や400%等の倍数拡大時、エッジがぼやけない) myMagick.Scale(new ImageMagick.Percentage(150.0)); //「Resize」を簡略化、高速化版。「行列の複製削除リサイズ」。 //(「Scale」よりも更に高速。 // リサイズ時に色の追加や削除を行わない為、GIFアニメーションリサイズ時等で使用できる) myMagick.Sample(new ImageMagick.Percentage(150.0));
倍数拡大(まろやか綺麗)
1回実行する毎に倍に拡大されます。拡大時のエッジが非常にまろやかになります。
倍数拡大のみですが、新たな色の追加がなく、かなり綺麗に拡大されます。
使用例が以下に記載されています。
IM使用方法→http://www.imagemagick.org/Usage/resize/#magnify
使用例→http://www.scale2x.it/
//倍数拡大(まろやか綺麗) myMagick.Magnify(); myMagick.Magnify(); //複数回使用が可能です。この例では400%拡大となります。
%でリサイズ(ぼけ最小、+-50%以内)
「Resize」時のぼけを最小にしたリサイズを行います。
但し、+−50%以内のみ有効です。
それ以外を入力すると、エイリアシングやモアレが発生します。
IM使用法→http://www.imagemagick.org/Usage/resize/#adaptive-resize
エイリアシングやモアレ→http://www.imagemagick.org/Usage/filter/#aliasing
//%でリサイズ(ぼけ最小、+-50%以内) //(+-50%以内のみ有効。それ以外を入力すると、 //エイリアシングやモアレが発生します。) myMagick.AdaptiveResize(new ImageMagick.MagickGeometry((int)Math.Round(myMagick.Width*1.5, MidpointRounding.AwayFromZero), (int)Math.Round(myMagick.Height * 1.5, MidpointRounding.AwayFromZero)));
シームカービングでリサイズ(画像印象を保持)
画像の印象をできる限り保持してリサイズを行う。
見た目に凄い機能ですが、画像の内容によっては不自然な歪みが生じます。
IM使用法→http://www.imagemagick.org/Usage/resize/#interpolative-resize
シームカービング→https://en.wikipedia.org/wiki/Seam_carving
YouTubeでのデモ→https://youtu.be/vIFCV2spKtg
//シームカービングでリサイズ(画像印象を保持) //(画像内容によっては不自然な歪みが生じます) myMagick.LiquidRescale(new ImageMagick.Percentage(70.0), new ImageMagick.Percentage(100.0));
自由変形でリサイズ
自由変形を利用してリサイズを行います。
自由変形のアルゴリズムを選択できます。
「Resize」より結果が良くなる事がありますが、その分処理が重くなります。
(フィルターとの併用も可能っぽい?未確認。)
IM使用法→http://www.imagemagick.org/Usage/resize/#distort
IM使用法→http://www.imagemagick.org/Usage/distorts/#resize
//自由変形でリサイズ double resizePercent = 1.0; //変倍率(100%→1.0) int out_Width = (int)Math.Round(myMagick.Width * resizePercent, MidpointRounding.AwayFromZero); int out_Height = (int)Math.Round(myMagick.Height * resizePercent, MidpointRounding.AwayFromZero); var param = new double[] { 0,0, //入力_左上座標 0,0, //出力_左上座標 0,myMagick.Height, //入力_左下座標 0,out_Height, //出力_左下座標 myMagick.Width,myMagick.Height, //入力_右下座標 out_Width,out_Height, //出力_右下座標 myMagick.Width,0, //入力_右上座標 out_Width,0 //出力_右上座標 }; //自由変形 //第2引数がtrueの場合は処理結果画像の全体を表示(RePage処理が必要となります) //第1引数で変換時のアルゴリズムを変更できます myMagick.Distort(ImageMagick.DistortMethod.Affine, true, param); //画像の位置をリセット myMagick.RePage(); //上下左右に1pxelずつ無駄なPixelが追加される為、削除。 myMagick.Crop(1, 1, out_Width, out_Height);
解像度の変更(縦横サイズ固定、縦横Pixel数変化)
画像の縦横のサイズを保ったまま解像度を変更した場合、
縦横のPixel数は変更解像度に従って変化します。
この時、内部でリサイズ処理が行われます。
IM使用時→http://www.imagemagick.org/Usage/resize/#resample
//解像度の変更(縦横サイズ固定、縦横Pixel数変化) //縦横のサイズを保ったまま解像度を変更します。 //その為、縦横のPixel数は指定解像度に従って変化します myMagick.Resample(300.0, 300.0);
%でリサイズ(フィルターを指定)
「Resize」時フィルターを使用する事で様々なアルゴリズムを使用できます。
例えばリサイズに「バイキュービック法」を使いたい場合は、
フィルターで「Cubic」を選択します。
IM使用時→http://www.imagemagick.org/Usage/filter/
フィルタ使用例→http://www.robotplanet.dk/graphics/imagemagick_scaling/
各フィルタのグラフ→http://sharp-bang.jp/prog/im.html
//%リサイズ(フィルターを指定) //Pointフィルタは変倍時ボケが出ませんが、モアレが顕著に出ます。 myMagick.FilterType = ImageMagick.FilterType.Point; myMagick.Resize(new ImageMagick.Percentage(150.0)); myMagick.FilterType = ImageMagick.FilterType.Undefined;//初期値に戻す。
他
以下のサイトを参考にしました。
ImageMagickでのリサイズについて説明
http://www.imagemagick.org/Usage/resize/
ImageMagickでのピクセルの拡大縮小時の畳み込み方法等の説明
http://www.imagemagick.org/Usage/morphology/
リサイズ時、独自のアルゴリズムを制作「FCBI」
「Nearest-Neighbor」「Bi-Liner」「Bi-Cubic」「Lanczoz」「Mitchell」
アルゴリズムによる違いも書いてある。
https://blog.awm.jp/2017/03/07/fcbi/
https://blog.awm.jp/2017/03/08/fcbi/
https://blog.awm.jp/2017/03/11/fcbi/
画像のリサイズ時、
「Nearest Neighbor法」「Bilinear法」「Bicubic法」「Lanczos法」
http://koujinz.cocolog-nifty.com/blog/2009/04/post-b8e6.html
IMのリサイズについて結構詳細にまとめてくれている
http://freeparticle.hatenablog.com/entry/2015/01/16/230956
0 件のコメント:
コメントを投稿