ImageSharp¶
最終更新日:2024/02/11
色々機能ありすぎて一部しか紹介できてません!
ImageSharpとは¶
.NET上で動く画像ライブラリ。
フルマネージドでプラットフォームに依存せずに使えるため、Webでも使える。
Webの解説はここにはないけどね!
Six Labors : ImageSharp
https://sixlabors.com/products/imagesharp/
ImageSharpライブラリ¶
基本的な画像の操作が含まれているライブラリ。
ファイルの読み書きや画像の情報など。
NuGetパッケージは「SixLabors.ImageSharp」。
ただ自分の環境だと最新の「2.0.0」だとエラーが出たので、1つ下の「1.0.4」を入れてる。
環境に合わせて入れてください。
今のところ最新の「3.1.2」で特に問題なし。
公式スタートガイド
https://docs.sixlabors.com/articles/imagesharp/gettingstarted.html
公式APIドキュメント
https://docs.sixlabors.com/api/ImageSharp/SixLabors.ImageSharp.html
画像を読み込む¶
画像ファイルパスを指定して読み込む。
using Image image = Image.Load("画像ファイルパス");
後ろにAsyncが付く非同期対応のメソッドもある。
using Image image = await Image.LoadAsync("画像ファイルパス");
引数の「out IImageFormat」を使用することで、読み込んだ画像ファイルのフォーマット情報が取得できる。
IImageFormat imageFormat;
using Image image = Image.Load("画像ファイルパス", out imageFormat);
読み込む際にピクセルフォーマットを指定することができる。
using Image image = Image.Load<Rgba32>("画像ファイルパス");
透過度のアルファチャンネルを使用する場合はきちんと指定すること。
(これ知らずに半透明できなくてめちゃくちゃ苦労した・・・)
ピクセルフォーマットについて
https://docs.sixlabors.com/articles/imagesharp/pixelformats.html
ピクセルフォーマットの種類
https://docs.sixlabors.com/api/ImageSharp/SixLabors.ImageSharp.PixelFormats.html
画像を保存する¶
画像ファイルパスを指定して保存。
読み込みと同じく、後ろにAsyncが付く非同期対応のメソッドもある。
/* BMPで保存 */
image.SaveAsBmp("画像ファイルパス");
/* JPEGで保存 */
image.SaveAsJpeg("画像ファイルパス");
/* PNGで保存 */
image.SaveAsPng("画像ファイルパス");
画像のリサイズ¶
image.Mutate(x => x.Resize(50, 50));
画像のコピー¶
using Image copyImage = image.Clone(x => x.Resize(image.Size));
バイト配列に変換する¶
バイト配列にすればSystem.Drawingだろうがなんだろうがやり取りできる。
バイト配列は「MemoryStream」を使用する。
/* バイト配列として取得 */
using Image imageWrite = Image.Load("画像ファイルパス");
using MemoryStream streamWrite = new();
imageWrite.Save(streamWrite, BmpFormat.Instance);
streamWrite.Flush();
byte[] array = stream.ToArray();
/* バイト配列から生成 */
using MemoryStream streamRead = new(array);
using Image imageRead = Image.Load(streamRead);
ImageSharp.Drawingライブラリ¶
画像へ描画する処理が含まれているライブラリ。
線引いたり図形描いたり。
NuGetパッケージは「SixLabors.ImageSharp.Drawing」。
線引くぐらいしかこのライブラリ使ってないのであまり解説できない。
↓のスタートガイド見てもらったほうがいいかも。
公式スタートガイド
https://docs.sixlabors.com/articles/imagesharp.drawing/gettingstarted.html
公式APIドキュメント
https://docs.sixlabors.com/api/ImageSharp.Drawing/SixLabors.ImageSharp.Drawing.html
線を引く¶
/* イメージを生成 */
using Image<Rgba32> image = new Image<Rgba32>(100, 100);
/* ペンを生成 */
Pen pen = Pens.Solid(Color.Red, 5);
/* 描画 */
image.Mutate(x => x.DrawLine(pen, new PointF(10, 10), new PointF(90, 90)));
多角形を描く¶
/* イメージを生成 */
using Image<Rgba32> image = new Image<Rgba32>(100, 100);
/* ペンを生成 */
Pen pen = Pens.Solid(Color.Red, 5);
/* ポリゴン用座標を生成 */
List<PointF> points = new()
{
new PointF(10, 10),
new PointF(50, 10),
new PointF(50, 50),
new PointF(10, 50),
};
/* 描画 */
image.Mutate(x => x.DrawPolygon(pen, points.ToArray()));