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

Einführung in die allgemeine API-Verwendung von Vue3

Inhaltsverzeichnis Veränderungen im Lebenszyklus ...

So installieren Sie RabbitMQ schnell in Docker

1. Holen Sie sich das Bild #Geben Sie die Version...

Tutorial zur Installation von Ubuntu Server in Vmware

In diesem Artikel finden Sie das grafische Tutori...

Implementierung von Platzhaltern und Escape-Zeichen in der Linux-Befehlszeile

Wenn wir Stapeloperationen für einen Dateityp aus...

So verwenden Sie Linux-Befehle in IDEA

Im Vergleich zum Windows-System bietet das Linux-...

Analyse der Prinzipien und Verwendung von Linux-Hardlinks und Softlinks

Im Linux-System gibt es einen Dateityp namens Lin...

Docker-Compose-Installationsmethode für die YML-Dateikonfiguration

Inhaltsverzeichnis 1. Offline-Installation 2. Onl...

Spezifische Schritte zur Verwendung des Vant-Frameworks im WeChat-Applet

Inhaltsverzeichnis 1. Öffnen Sie das Projektverze...