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

推薦する

JavaScript の継承についてどれくらい知っていますか?

目次序文コンストラクタ、プロトタイプオブジェクト、インスタンスオブジェクトの関係プロトタイプチェーン...

Windows 7 での MySQL 8.0.18 の導入とインストールのチュートリアル

1. 事前準備 (windows7+mysql-8.0.18-winx64) 1. ダウンロードアド...

Vueは、商品の数を制御するためのコンポーネントのパッケージ化と使用を実装します。

Vueのコントロール商品数量コンポーネントのカプセル化と使用は参考までに。具体的な内容は以下のとお...

Docker で Nginx イメージ サーバーを構築する方法

序文一般的な開発では、画像をディレクトリにアップロードし、ディレクトリとファイル名を連結してデータベ...

デザイン参考 WordPressウェブサイト構築成功事例

これら 16 のサイトはそれぞれ注意深く読む価値があり、どのサイトでも推奨されている Web サイト...

クラウド サーバー Ubuntu_Server_16.04.1 に MySQL をインストールしてリモート接続を有効にする方法

1. MySQLをインストールします。対応するソフトウェアをインストールするには、次の 3 つのコマ...

React NativeのstartReactApplicationメソッドの簡単な分析

今回は、 RNの起動処理を整理しました。最後のstartReactApplication比較的複雑で...

Vue.js スタイルレイアウト Flutter ビジネス開発共通スキル

シャドウスタイルにおけるフラッターとCSSの対応UIによって指定されたCSSスタイル 幅: 75px...

HTML スペースコードの簡単な分析

HTML についてどれくらい知っていますか? 現在、基本的な HTML コードを学習している場合は、...

Ubuntu でホームディレクトリを新しいパーティションに移行する詳細なチュートリアル

ユーザーのホーム ディレクトリがどんどん大きくなってきたら、ホーム ディレクトリを新しいパーティショ...

Layui は複数条件クエリのサンプルコードを実装します

最近ファイルシステムを作ったのですが、フィールドが多すぎることに気づきましたページングを使用した複数...

CSSスタイルとセレクターの使い方

HTML で CSS を使用する 3 つの方法: 1. インラインスタイル: 要素のスタイル属性を通...

WeChatアプレットが計算機機能を実装

この記事では、WeChatアプレットの計算機機能を実装するための具体的なコードを参考までに紹介します...

ソースコードから、Vue2がデータとメソッドを直接取得できる理由がわかる

目次1. 例: これはデータとメソッドを直接取得できます2. 環境を準備し、ソースコードをデバッグし...

Navicat for MySQLのスケジュールされたデータベースバックアップとデータ復旧の詳細

データベースの変更または削除操作によってデータ エラーが発生したり、データベースがクラッシュしたりす...