Linux/Docker で System.Drawing.Common を使用する

Linux/Docker で System.Drawing.Common を使用する

序文

プロジェクトを .net core に移行した後、 System.Drawing.Commonコンポーネントを使用して Image および Bitmap タイプを操作し、検証コード、QR コード、画像操作などの機能を生成できます。 System.Drawing.Commonコンポーネントは GDI+ に依存していますが、Linux には GDI+ がありません。Google でプログラミングした後、Mono チームが C 言語でGDI+インターフェイスを実装し、Windows 以外のシステムで GDI+ インターフェイスにアクセスできるようにしていることを知りました。これはlibgdiplusはずです。したがって、 System.Drawing.Commonコードを Linux 上で安定して実行するには、コンポーネントlibgdiplusをインストールする必要があります。現在、それらのほとんどは docker によってリリースされています。libgdiplus libgdiplusすばやく簡単にインストールするにはどうすればよいでしょうか?

libgdiplusをインストールする

解決策1

Microsoft が提供するmcr.microsoft.com/dotnet/core/aspnet:3.1をベースにlibgdiplusでイメージを再構築しますが、問題は将来バージョンが更新された場合に再度再構築する必要があることです。もちろん、自動的にビルドするスクリプトを書けば問題はありません。ハハハ

解決策2

私も現在使用しているのがこれです。アプリケーションイメージをビルドするときにlibgdiplusをインストールします。しかし、システムイメージのソースが海外のものなので、 libgdiplusのインストールが非常に遅くて耐えられません。システム パッケージのソース アドレスを Alibaba Cloud パッケージのソース アドレスに変更したところ、問題は解決しました。 参照Dockerfile次のとおりです。

mcr.microsoft.com/dotnet/core/aspnet:3.1 より
sed -i "s@http://deb.debian.org@http://mirrors.aliyun.com@g" /etc/apt/sources.list を実行します。 
apt-get update -y && apt-get install -y libgdiplus && apt-get clean && ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll を実行します。
ARGプロジェクト
ワークディレクトリ /app
...

パッケージソースのアドレスを置き換えます。公式イメージはubuntuではなくdebianのソースを使用していることに注意してください。最初はubuntuだと思って長い間失敗しました。

sed -i "s@http://deb.debian.org@http://mirrors.aliyun.com@g" /etc/apt/sources.list

追加情報: 中国語フォントが見つからない場合はどうすればいいですか?簡単

上記の問題に加えて、フォントが不足しているという問題も発生し、生成された画像のすべての中国語フォントが文字化けしてしまいました。ここでの中国語とは、プログラムを通じて私たちが自分で描いたものを指します。この質問についてはどうですか?足りないものを補うだけです。フォントが足りない場合は、フォントを補うだけです。上記のDockerfile調整に基づいて:

mcr.microsoft.com/dotnet/core/aspnet:3.1 より
sed -i "s@http://deb.debian.org@http://mirrors.aliyun.com@g" /etc/apt/sources.list を実行します。 
apt-get update -y && apt-get install -y libgdiplus locales fontconfig && apt-get clean && ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll を実行します。
sed -ie 's/#zh_CN.UTF-8 UTF-8/zh_CN.UTF-8 UTF-8/g' /etc/locale.gen && locale-gen && mkdir /usr/share/fonts/truetype/deng/ を実行します。
./fonts/* /usr/share/fonts/truetype/deng/ を追加します。
fc-cache -vf && fc-list を実行します。
環境変数 LANG zh_CN.UTF-8
ARGプロジェクト
ワークディレクトリ /app
...

Linux/Docker で System.Drawing.Common を使用する際の落とし穴について説明したこの記事はこれで終わりです。Linux docker で System.Drawing.Common を使用する方法に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。

<<:  Vue プロジェクトでよく使用されるツール機能の概要

>>:  MySQL スケジュールバックアップタスクの簡単な分析

推薦する

JS関数の継承について学ぶ記事

目次1. はじめに: 2. プロトタイプチェーン継承: 3. コンストラクタ継承の借用(オブジェクト...

MySQL データベースのデータ テーブルの最適化、外部キーの分析、3 つのパラダイムの使用

この記事では、例を使用して、MySQL データベースのデータ テーブルの最適化、外部キーの使用、およ...

Windows Server 2019 IIS10.0+PHP(FastCGI)+MySQL 環境構築チュートリアル

準備1. 環境の説明:オペレーティング システム: Windows Server 2019 PHP ...

マークアップ言語 - テキストの CSS スタイルを指定する

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

ページのスクロールバーを無効にするには、overflow: hiddenを使用します。

コードをコピーコードは次のとおりです。 html {オーバーフロー: 非表示; }体{オーバーフロー...

HTML ドラッグ アンド ドロップ機能の実装コード

Vueベースこの機能の核となるアイデアは、JavaScript コードを通じてページ上のノードの左余...

Dockerイメージのエクスポートとインポート操作

基本イメージが以前に構成されていて、これらのイメージが他の場所でも必要な場合はどうなりますか?回答:...

docker インストール後に hello-world を実行する問題を解決する

yumを使用してcentos7.3にDocker V1.13.1をインストールしましたしかし、doc...

例を通してMySQLパーティションテーブルの原理と一般的な操作を学びます

1. パーティションテーブルの意味パーティション テーブル定義は、任意のサイズに設定できるルールに従...

Select はダブルクリック dbclick イベントをサポートしていません

XML/HTML コードコンテンツをクリップボードにコピー< div クラス= "c...

シンプルな計算機を実装する JavaScript コード

この記事では、参考までに、簡単な計算機を実装するためのJavaScriptの具体的なコードを紹介しま...

nginx.conf ファイルの構文強調表示とフォーマット設定には nginx.vim ツールを使用します。

私はtengineを使用しています。インストールディレクトリは/usr/local/tengineで...

JavaScriptにおけるこのポインティング問題の詳細な説明

序文信じてください。この記事の 7️⃣ ステップを覚えておけば、JS の this リファレンスを完...

CSSは半透明の境界と複数の境界のシーン分析を実現します

シナリオ 1:半透明の境界線を実現するには: CSS スタイルのデフォルトの動作により、背景色はコン...