前回の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°傾けたので、全体のサイズが大きくなり、新しくできた背景の部分は白くなっています。(わかりやすくするためにブログの背景を一部、黒にしています)
できれば、新しくできた背景は透過にしたいので、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で保存されています。
が、新しい背景の部分は依然白いままです。
無駄にファイルサイズだけ大きくなった感じですね。
ではちゃんと回転後新しい領域が透過になるようにしてみます。
こちらも簡単で、回転等の操作をする前に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); }
次はちゃんと新しい領域が透過された画像になりました。
というわけで、今回は画像の回転と画像フォーマットの変更を合わせて説明してみました。
このように、簡単に使えるのがよいところですね。