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

Erläuterung des MySQL-Multitabellen-Join-Abfragebeispiels

In tatsächlichen Projekten gibt es Beziehungen zw...

HTML-Code, der den Internet Explorer zum Einfrieren bringen kann

Wir müssen lediglich einen beliebigen Texteditor ö...

Detaillierte Erklärung der Vue-Komponenten

<Text> <div id="Wurzel"> &l...

Detaillierte Erklärung der Verwendung des Linux-Befehls „tee“

Der Befehl tee wird hauptsächlich verwendet, um d...

Detaillierte Erläuterung der Js-Klassenkonstruktion und Vererbungsfälle

Die Definition und Vererbung von Klassen in JS si...

Proxy realisiert das Prinzip der bidirektionalen Bindung von Vue3-Daten

Inhaltsverzeichnis 1. Vorteile von Proxy gegenübe...

Tutorial zur MySQL-Installation unter Linux (Binärdistribution)

Dieses Tutorial beschreibt Ihnen die detaillierte...

Beispiel für die Implementierung einer virtuellen Liste im WeChat Mini-Programm

Inhaltsverzeichnis Vorwort analysieren Erste Rend...

Was bedeutet Eingabetyp und wie kann die Eingabe begrenzt werden?

Gängige Methoden zur Begrenzung der Eingabe 1. Um ...

Mobiles Internet-Zeitalter: Responsive Webdesign ist zum allgemeinen Trend geworden

Wir befinden uns in einer Ära der rasanten Entwick...

Erfahrungsaustausch über die Priorität des Ladens von CSS-Stilen

Während der Projektentwicklung bin ich gestern auf...