System.Drawing.Common
パッケージ
System.Drawing
名前空間には画像を扱う上で便利なものが含まれていますが、そのままだとドキュメントに見えるものの半分も利用できません。Windowsで開発していてもです・・・
これは.Net Frameworkから引き継いだもので、System.Drawing
名前空間のものはWindowsのGDI+ APIに依存しているためWindows以外の環境で利用できません。.Net Coreはクロスプラットフォームがデフォルトなので、このような環境依存のものは利用できないのでしょう。でもドキュメントを眺めていると.Net Core 3.0から対応という記述が見られます。いや使えないじゃん・・・
これの正式な解決策かは知りませんが、NugetからSystem.Drawing.Common
パッケージを追加することでSystem.Drawing
名前空間内のものを.Net Coreなプロジェクトにおいても利用可能になります(MS公式のものなので多分正解なはず・・・)。
これをインストールしておくことでWindowsではそのまま意図通りの動作を得られますし、シングルバイナリ出力しても問題ありません。しかし、Windows以外のプラットフォームへ持っていくとDllNotFoundException
が投げられることでしょう。結局Windows依存なのか・・・
libgdiplus
依存関係が無いなら依存関係を整えてやれば良いだけのこと。非Windowsにおける.Net実装であるMonoがSystem.Drawing
の非Windows実装であるlibgdiplusというライブラリをリリースしています。
これがあればWindows以外でもそのままのコードでSystem.Drawing
名前空間のものをほぼ利用できます(100%実装してないと書かれているので、利用できないものもあるでしょう・・・)。
MacOS
$ brew install mono-libgdiplus
Linux
$ sudo apt-get update $ sudo apt-get install libgdiplus
.NET COREでSYSTEM.DRAWINGを使う UBUNTU編より。
※私自身は、Linuxでの動作は未確認です。