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 の display:grid、グリッドレイアウトの紹介

1. グリッドレイアウト(グリッド): Web ページをグリッドに分割し、さまざまなグリッドを組み合...

MySQL 8.0.15 圧縮版インストール グラフィック チュートリアル

この記事では、参考までにMySQL 8.0.15圧縮版のインストール方法を紹介します。具体的な内容は...

Dockerイメージストレージoverlayfsの使用

1. 概要Docker のイメージはレイヤーで設計されています。各レイヤーは「レイヤー」と呼ばれます...

Docker は次の「Linux」になれるか?

Linux オペレーティング システムは過去 20 年間にわたってデータ センターに革命をもたらし...

SQLで同じフィールドの異なる値のデータ統計を実行する

適用シナリオ: シールのさまざまな状態に応じて、さまざまな状態のシールの数をカウントする必要がありま...

MySQLで時間別データと最後の時間別データの差をクエリするアイデアの詳細な説明

1. はじめに要件は、特定の時間範囲内で、1 時間ごとのデータと前の 1 時間ごとのデータの差と比率...

Vant+postcss-pxtoremはブラウザ適応機能を実装します

Remレイアウトの適応Vant のスタイルでは、デフォルトで px を単位として使用します。rem ...

Vue3+スクリプト設定+ts+Vite+Volarプロジェクト

目次Viteを使用してvue + tsプロジェクトを作成するVue 3の3つの構文オプションAPIコ...

HTML でカスタム画像を使用してチェックボックスを表示する方法

チェックボックスの使用を実装するために画像を使用する必要がある場合は、それを使用して実装できます。実...

MySQL で期限切れのデータレコードを定期的に削除する簡単な方法

1. MySQL に接続してログインしたら、まず MySQL でイベント機能が有効になっているかどう...

nginx/apache 静的リソースのクロスドメインアクセスの問題を解決する詳細な説明

1. Apache 静的リソースのクロスドメイン アクセスApache設定ファイルhttpd.con...

JavaScript の静的スコープと動的スコープを例を使って説明します

目次序文静的スコープと動的スコープ静的スコープ実行プロセス動的スコープ実行プロセスエクササイズ練習1...

垂直方向の中央揃えをエレガントに実現する方法を教えます(推奨)

序文CSS で水平方向と垂直方向に中央揃えする方法はたくさんあります。この記事で紹介する方法は非常に...

解決策 - BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: 権限が不十分です

1) jdkファイルが保存されているフォルダパスを入力します私はここにいますusr/local/jd...

MySQL のスローログオンラインの問題と最適化ソリューション

MySQL スロー ログは、MySQL DBA やその他の開発および運用担当者が細心の注意を払う必要...