目次→http://1studying.blogspot.jp/2017/07/c-magicknetmokuzi.html#kuw12
リサイズ
画像の拡大縮小を行います。
%でリサイズ
1 2 | //%リサイズ myMagick.Resize( new ImageMagick.Percentage(50.0)); |
横%縦%でリサイズ
1 2 | //横%縦%でリサイズ myMagick.Resize( new ImageMagick.Percentage(50.0), new ImageMagick.Percentage(100.0)); |
指定Pixel以下の画像にリサイズ(縦横比率は変更無し)
1 2 | //指定Pixel以下の画像にリサイズ(縦横比率は変更無し) myMagick.Resize(500, 500); |
サムネイル作成用リサイズ(高速縮小)
1 2 3 4 5 6 7 8 9 10 | //サムネイル作成時の高速縮小用 //・「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; |
高速リサイズ(通常は使用しない)
1 2 3 4 5 6 7 8 | //高速リサイズ(通常は使用しない) //「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/
1 2 3 4 | //倍数拡大(まろやか綺麗) myMagick.Magnify(); myMagick.Magnify(); //複数回使用が可能です。この例では400%拡大となります。 |
%でリサイズ(ぼけ最小、+-50%以内)
「Resize」時のぼけを最小にしたリサイズを行います。
但し、+−50%以内のみ有効です。
それ以外を入力すると、エイリアシングやモアレが発生します。
IM使用法→http://www.imagemagick.org/Usage/resize/#adaptive-resize
エイリアシングやモアレ→http://www.imagemagick.org/Usage/filter/#aliasing
1 2 3 4 | //%でリサイズ(ぼけ最小、+-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
1 2 3 | //シームカービングでリサイズ(画像印象を保持) //(画像内容によっては不自然な歪みが生じます) 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | //自由変形でリサイズ 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
1 2 3 4 | //解像度の変更(縦横サイズ固定、縦横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
1 2 3 4 5 | //%リサイズ(フィルターを指定) //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 件のコメント:
コメントを投稿