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 スケジュールバックアップタスクの簡単な分析

推薦する

CSS3 背景コントロールプロパティと色遷移を使用してグラデーション効果を実現します。

CSS3 背景画像関連互換性: IE9+背景クリップ 背景画像描画領域background-cli...

Nginxのアクセス制限設定の詳細な説明

Nginxのアクセス制限設定とはNginx のアクセス制限は、IP ベースのアクセス制御とユーザーベ...

MySQL パーティション フィールド列に別のインデックスを作成する必要がありますか?

序文パーティション フィールドは主キーの一部でなければならないことは誰もが知っています。では、複合主...

DockerでのinfluxDB分散時系列データベースのインストールと関連操作について簡単に説明します。

influxDB の紹介influxDB は分散型時系列データベースです。 cAdvisor はリ...

HTMLおよびJSPページがキャッシュされ、Webサーバーから再取得されるのを防ぎます。

ユーザーがログアウトした後、ブラウザの戻るボタンがクリックされると、Web アプリケーションは保護さ...

Ubuntu 18.04 MySQL 8.0 のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0のインストールと設定方法を参考までに紹介します。具体的な内容は以下の...

停止したすべてのDockerコンテナを1つのコマンドで再起動する

停止したすべてのDockerコンテナを1つのコマンドで再起動するdocker ps -a | gre...

MySQL btree インデックスとハッシュ インデックスの違い

MySQL では、ほとんどのインデックス (PRIMARY KEY、UNIQUE、INDEX、FUL...

Ubuntu の Docker で mysql5.6 をインストールする方法

1. mysql5.6をインストールする docker 実行 mysql:5.6すべてのアイテムのダ...

JavaScript でグレイウルフのポットビーティングゲームを実装

1. プロジェクト文書 2. ページレイアウトにHTMLとCSSを使用するHTML部分 <di...

MySQL 8.0.22.0 のダウンロード、インストール、設定方法のグラフィックチュートリアル

MySQL 8.0.22のダウンロード、インストール、設定方法、参考までに具体的な内容は次のとおりで...

Linux で scp コマンドを使用してファイルをリモートでコピーする方法の詳細な説明

序文scp は secure copy の略です。scp は、Linux システムの ssh ログイ...

MySQLのサブクエリユニオンの効率性についての簡単な説明と

最近の製品テストでは、同時呼び出し数が 10 未満の場合に応答時間が 100 ミリ秒以内に維持できな...

Redhat 7.3 に MySQL 8.0.22 をインストールするための詳細なチュートリアル (バイナリ インストール)

目次1. MySQLインストールパッケージをダウンロードする2. MySQLのアンインストール手順3...