Verwenden von System.Drawing.Common in Linux/Docker

Verwenden von System.Drawing.Common in Linux/Docker

Vorwort

Nachdem das Projekt auf .net Core migriert wurde, können wir die Komponente System.Drawing.Common verwenden, um Bild- und Bitmap-Typen zu betreiben und Bestätigungscodes, QR-Codes, Bildoperationen und andere Funktionen zu generieren. Die Komponente System.Drawing.Common hängt von GDI+ ab, aber es gibt kein GDI+ unter Linux. Nachdem ich für Google programmiert hatte, fand ich heraus, dass das Mono-Team die GDI+ -Schnittstelle in der Programmiersprache C implementiert hatte, wodurch Nicht-Windows-Systeme auf die GDI+-Schnittstelle zugreifen konnten. Dies sollte libgdiplus sein. Wenn Sie den System.Drawing.Common -Code stabil unter Linux ausführen möchten, müssen Sie daher die Komponente libgdiplus installieren. Jetzt werden die meisten davon von Docker freigegeben. Wie installiere ich libgdiplus schnell und einfach?

Installieren Sie libgdiplus

Lösung 1

Erstellen Sie mit libgdiplus basierend auf mcr.microsoft.com/dotnet/core/aspnet:3.1 von Microsoft ein Image neu. Das Problem besteht jedoch darin, dass es bei einer zukünftigen Aktualisierung der Version erneut neu erstellt werden muss. Wenn Sie ein Skript zum automatischen Erstellen schreiben, tritt natürlich kein Problem auf. Ha ha

Lösung 2

Das ist auch das, was ich derzeit verwende. Ich installiere libgdiplus beim Erstellen des Anwendungsimages. Da die Systemimagequelle jedoch aus dem Ausland stammt, ist die Installation von libgdiplus sehr langsam und unerträglich. Wir haben die Quelladresse des Systempakets in die Quelladresse des Alibaba Cloud-Pakets geändert und das Problem wurde gelöst. Das Referenz Dockerfile lautet wie folgt:

VON mcr.microsoft.com/dotnet/core/aspnet:3.1
RUN sed -i "s@http://deb.debian.org@http://mirrors.aliyun.com@g" /etc/apt/sources.list 
Führen Sie apt-get update -y und apt-get install -y libgdiplus und apt-get clean aus und führen Sie es in folgendem Befehl aus: /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll
ARG-PROJEKT
ARBEITSVERZEICHNIS /app
...

Ersetzen Sie die Paketquelladresse. Bitte beachten Sie, dass das offizielle Image die Quelle von debian anstelle von ubuntu verwendet. Zuerst dachte ich, es sei ubuntu und es hat lange gefehlt.

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

Extra: Was tun, wenn chinesische Schriftarten fehlen? Einfach

Zusätzlich zu den oben genannten Problemen sind uns auch fehlende Schriftarten aufgefallen, was dazu führte, dass alle chinesischen Schriftarten in den generierten Bildern verstümmelt waren. Mit Chinesisch sind hier die Schriftarten gemeint, die wir selbst mit dem Programm gezeichnet haben. Was ist mit dieser Frage? Ergänzen Sie einfach, was Ihnen fehlt. Wenn Ihnen Schriftarten fehlen, ergänzen Sie einfach die Schriftarten. Basierend auf der obigen Dockerfile -Anpassung:

VON mcr.microsoft.com/dotnet/core/aspnet:3.1
RUN sed -i "s@http://deb.debian.org@http://mirrors.aliyun.com@g" /etc/apt/sources.list 
Führen Sie apt-get update -y und apt-get install -y libgdiplus locales fontconfig und apt-get clean und ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll aus.
RUN 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/
HINZUFÜGEN ./fonts/* /usr/share/fonts/truetype/deng/
FÜHREN SIE Fc-Cache -vf && Fc-Liste aus
ENV LANG zh_CN.UTF-8
ARG-PROJEKT
ARBEITSVERZEICHNIS /app
...

Dies ist das Ende dieses Artikels über die Fallstricke bei der Verwendung von System.Drawing.Common in Linux/Docker. Weitere relevante Inhalte zur Verwendung von System.Drawing.Common in Linux Docker finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die verwandten Artikel weiter unten. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

<<:  Zusammenfassung häufig verwendeter Toolfunktionen in Vue-Projekten

>>:  Kurze Analyse der geplanten MySQL-Sicherungsaufgaben

Artikel empfehlen

Lösen Sie das MySQL 5.7.9 Version sql_mode=only_full_group_by Problem

MySQL 5.7.9 Version sql_mode=only_full_group_by P...

MySQL-Platzhalter (erweiterte SQL-Filterung)

Inhaltsverzeichnis Lassen Sie uns zunächst kurz P...

Detaillierte Erklärung des Unterschieds zwischen JavaScript onclick und click

Inhaltsverzeichnis Warum wird addEventListener be...

Der Prozess der Installation und Konfiguration von Nginx in Win10

1. Einleitung Nginx ist ein kostenloser, quelloff...

Vue realisiert problemlos Wasserzeicheneffekte

Vorwort: Verwenden Sie den Wasserzeicheneffekt im...

Weitergabe von Techniken für Farbkontrast und -harmonie im Web

Farbkontrast und Harmonie Unter kontrastierenden ...

WiFi-Entwicklung | Einführung in die WiFi-Wireless-Technologie

Inhaltsverzeichnis Einführung in die WiFi-Wireles...

Kapseln Sie die Navigationsleistenkomponente mit Vue

Vorwort: Die vollständige Kapselung eines Funktio...

Vue setzt die Daten auf ihren ursprünglichen Zustand zurück

In einigen Fällen müssen die Daten in den Daten w...

Detailliertes Tutorial zur Installation von Prometheus mit Docker

Inhaltsverzeichnis 1. Node Exporter installieren ...

Vue implementiert Card-Flip-Karussellanzeige

Karussellanzeige der Vue-Karte beim Umschalten de...