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

推薦する

IframeとFRAMEの違いの分析

1. Iframe タグの使用<br />Iframe については、「忘れられた隅」に放...

CSS3 のテキストとフォントの新しい設定

テキストシャドウテキストシャドウ: 水平オフセット 垂直オフセット ぼかし色互換性: IE10+ &...

MySQL ステートメントロックの実装の分析

概要: 2 つの MySQL SQL ステートメント ロックの分析次のSQL文にどのようなロックが追...

MySQL 8.0.11 MacOS 10.13 のインストールと設定方法のグラフィックチュートリアル

MacにMySQLデータベースをインストールし、環境変数を設定する手順を参考までに記録します。具体的...

CSS3 で複数のカスタムフォントを導入する

今日、HTML に問題を発見しました。多くのデフォルト フォントが提供されていますが、「Bold」、...

MySQLフィールド定義でnullを使用しない理由の分析

NULL が頻繁に使用されるのはなぜですか? (1)Javaのnull Java の NullPoi...

JS で単一ファイルコンポーネントを実装する方法

目次概要単一ファイルコンポーネント基本概念シンプルなローダーコンポーネントコンテンツの解析コンポーネ...

一定期間の日ごと、時間ごとの統計データを取得するMySQLの詳しい説明

毎日の統計情報を取得するプロジェクトを実行する際、プロジェクト ログを分析する必要があります。要件の...

Vueがsweetalert2プロンプトコンポーネントを統合する際の問題についてお話ししましょう

目次1. プロジェクト統合1. CDNインポート方法: 2. 箱の梱包を確認する3. 迅速な箱詰め4...

アイデアがWebプロジェクトを公開した後、Tomcatサーバーがプロジェクトとそのソリューションを見つけることができません

概要プロジェクトは正常に作成され、正常にデプロイされましたが、以下に示すように、Tomcat サーバ...

Linux でスペースを含むファイルを削除する (ディレクトリではない)

日常業務では、スペースのないファイルに遭遇することがよくあります。これにより、削除操作がはるかに簡単...

Vue で video.js を使用して m3u8 形式のビデオを再生する方法

目次1. インストール2. videojsの紹介3. コンポーネントでのテストと使用1. 基本的な自...

MySQL の高度な機能 - データ テーブル パーティショニングの概念とメカニズムの詳細な説明

目次パーティション分割メカニズムSELECTクエリINSERT操作DELETE操作更新操作パーティシ...

検索ボックスと検索ボタンの境界線が重なり合わない問題を解決

今日、Baiduのページで練習していたところ、検索ボックスとボタンの余白とパディングの値が0に設定さ...