Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 38588|Odpowiedź: 6

[.NET Core] ASP.NET Core (czternaście) opiera się na captcha obrazu SkiaSharp

[Skopiuj link]
Opublikowano 4.04.2022 o 12:25:53 | | | |
Wcześniej, podczas tworzenia ASP.NET projektów w .NET Framework, wszystkie były wdrażane na systemach Windows i nie mogły być wieloplatformowe, więc można używać System.Drawing do generowania kodów weryfikacyjnych obrazów, w następujący sposób:

asp.net MVC Beautiful Image captcha
https://www.itsvse.com/thread-4911-1-1.html

WebAPI implementuje funkcję kodu weryfikacyjnego w grafice
https://www.itsvse.com/thread-7304-1-1.html

Tworzenie online z użyciem projektów .NET Core, generowanie captcha obrazów wymaga odwołania się do biblioteki System.Drawing.Common, ale na razieSystem.Drawing.Common NuGet jest teraz grupowany jako:WindowsKonkretne biblioteki。 Podczas kompilacji dla systemów operacyjnych innych niż Windows, Platform Analyzer ostrzega podczas kompilacji. Jak pokazano na poniższym rysunku:

Ta strona telefoniczna jest dostępna na wszystkich platformach. 'Font' jest obsługiwany tylko na 'Windows'.



Przed .NET 6 użycie pakietu System.Drawing.Common nie generowało żadnych ostrzeżeń w czasie kompilacji ani nie wyrzucało wyjątków w czasie wykonywania. Począwszy od .NET 6, Platform Analyzer wydaje ostrzeżenie o czasie kompilacji podczas kompilacji kodu referencyjnego dla systemów operacyjnych innych niż Windows. Ponadto, jeśli opcja konfiguracji nie jest ustawiona, zostanie wyrzucony następujący wyjątek w czasie działania:


System.TypeInitializationException : Inicjalizator typu dla 'Gdip' wygenerował wyjątek.
      ---- System.PlatformNotSupportedException : System.Drawing.Common nie jest obsługiwany na platformach innych niż Windows. WidziećLogowanie do linku jest widoczne.Więcej informacji.
      Stack Trace:
           na stronie System.Drawing.SafeNativeMethods.Gdip.GdipCreateBitmapFromFile(Nazwa pliku ciągu ciągów, IntPtr& bitmap)
        /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(42,0): na stronie System.Drawing.Bitmap.. ctor(String filename, boolean useIcm)
        /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(25,0): na stronie System.Drawing.Bitmap.. ctor(nazwa pliku string)
        /_/src/libraries/System.Resources.ResourceManager/tests/ResourceManagerTests.cs(270,0): na stronie System.Resources.Tests.ResourceManagerTests.EnglishImageResourceData()+ MoveNext()
        /_/src/libraries/System.Linq/src/System/Linq/Select.cs(136,0): at System.Linq.Enumerable.SelectEnumerableIterator'2.MoveNext()
        ----- Inner Stack Trace -----
        /_/src/libraries/System.Drawing.Common/src/System/Drawing/LibraryResolver.cs(31,0): na stronie System.Drawing.LibraryResolver.EnsureRegistered()
        /_/src/libraries/System.Drawing.Common/src/System/Drawing/GdiplusNative.Unix.cs(65,0): na stronie System.Drawing.SafeNativeMethods.Gdip.PlatformInitialize()
        /_/src/libraries/System.Drawing.Common/src/System/Drawing/Gdiplus.cs(27,0): na stronie System.Drawing.SafeNativeMethods.Gdip.. cctor()

Odwołanie do błędu:

Problemy z znakowaniem wodnym .NET Core na obrazach Linuksa
https://www.itsvse.com/thread-9605-1-1.html

Do przetwarzania obrazów wieloplatformowych oficjalna dokumentacja Microsoftu zaleca korzystanie z następujących bibliotek:

  • ImageSharp
  • SkiaSharp
  • Microsoft.Maui.Graphics

Odniesienie:Logowanie do linku jest widoczne.

Ten artykuł wykorzystuje bibliotekę SkiaSharp do generowania graficznego CAPTCHA,SkiaSharp to wieloplatformowe API grafiki 2D dla platformy .NET oparte na bibliotece graficznej Google Skia (skia.org).。 Oferuje kompleksowe 2D API, które można używać na modelach mobilnych, serwerowych i desktopowych do renderowania obrazów.

Adres:Logowanie do linku jest widoczne.

Najpierw stwórz nowy projekt ASP.NET Core 6 i odnośnikSkiaSharpOdpowiednie biblioteki to:

Należy zauważyć, że jeśli projekt musi zostać wdrożony na systemie Linux, wymagane są odwołaniaSkiaSharp.NativeAssets.Linuxklasa, w przeciwnym razie błąd będzie następujący:

Apr 03 18:51:06 raspberrypi dotnet[6203]: fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]
Kwi 03 18:51:06 raspberrypi dotnet[6203]: Podczas wykonywania żądania wystąpił nieobsłużony wyjątek.
Kwi 03 18:51:06 raspberrypi dotnet[6203]: System.TypeInitializationException: Inicjalizator typu dla 'SkiaSharp.SKImageInfo' wyrzucił wyjątek.
Kwi 03 18:51:06 raspberrypi dotnet[6203]: ---> System.DllNotFoundException: Nie można załadować współdzielonej biblioteki 'libSkiaSharp' ani jednej z jej zależności. Aby pomóc w diagnozowaniu problemów z ładowaniem, rozważ ustawienie zmiennej środowiskowej LD_DEBUG: liblibSkiaSharp: cannot open shared object file: Brak takiego pliku ani katalogu
03 kwietnia 18:51:06 raspberrypi dotnet[6203]: at SkiaSharp.SkiaApi.sk_colortype_get_default_8888()
03 kwietnia 18:51:06 raspberrypi dotnet[6203]: at SkiaSharp.SKImageInfo:. cctor()
Kwi 03 18:51:06 raspberrypi dotnet[6203]: --- Koniec wewnętrznego śledzenia wyjątków stosu ---
Apr 03 18:51:06 raspberrypi dotnet[6203]: at HomeCloud.ImageCaptcha.GetCaptcha(String captchaText, Int32 width, Int32 height, Int32 lineNum, Int32 lineStrookeWidth) w języku C: \Users\itsvse_pc\source\repos\ConsoleApp1\HomeCloud\ImageCaptcha.cs:linia 184
03 kwietnia 18:51:06 raspberrypi dotnet[6203]: at HomeCloud.Controllers.HomeController.Test() in C:\Users\itsvse_pc\source\repos\ConsoleApp1\HomeCloud\Controllers\HomeController.cs :linia 80
Apr 03 18:51:06 raspberrypi dotnet[6203]: at lambda_method34(Closure , Object , Object[] )

Aby rozważyć, że niektóre czcionki mogą być nieobecne w różnych systemach, co skutkuje niemożnością normalnego wyświetlania informacji o kodach weryfikacyjnych, musimy ręcznie skopiować czcionki do projektu, utworzyć nowy folder czcionek w projekcie i skopiować do niego czcionki, jak pokazano na poniższym rysunku:



Konfiguracja wygląda następująco:

Według materiałów referencyjnych w Internecie, graficzny kod weryfikacyjny generowany przez test przedstawia się następująco:



Wygenerowany CAPTCHA ma dwie wady:CAPTCHA jest całkowicie (łatwo rozpoznawcza OCR), a litery CAPTCHA są ściśle ze sobą bez żadnych odstępówAby rozwiązać te dwa problemy, zoptymalizowałem kod w następujący sposób:

Kod kontrolera HomeController wygląda następująco:

Ostateczne wizualizacje przedstawiają się następująco:


Na koniec załącz plik czcionki:

Turyści, jeśli chcecie zobaczyć ukrytą zawartość tego wpisu, proszęOdpowiedź


(Koniec)




Poprzedni:[Skręć]. Nowa funkcja NET 6 Enumerable.Chunk()
Następny:Angular zapobiega wyzwoleniu zdarzenia kliknięcia nadrzędnego
 Ziemianin| Opublikowano 4.04.2022 o 12:28:35 |
recenzja

ASP.NET Core (XIII), aby określić, czy jest to żądanie Ajax, czy nie
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (dwanaście) front-end JS, bundling CSS i kompresja
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET Core (XI) trasa końcowa dodaje oprogramowanie pośrednicze do wyświetlania wszystkich usług DI
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Szczegółowe wyjaśnienie priorytetów konfiguracji w Core(10).
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Szczegółowe wyjaśnienie middleware Middleware w Core (9).
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET Szczegółowe wyjaśnienie Core Middleware
https://www.itsvse.com/thread-8126-1-1.html

ASP.NET domyślnych parametrów interfejsu Swagger w Core(8).
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Rdzeń (7) Dogłębna analiza kodu źródłowego frameworka
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI ręcznie uzyskuje metodę wstrzykiwania obiektów
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (pięć) opiera się na rozproszonych transakcjach CAP
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Filtr Core(4) zunifikowany walidacja modelu modelu ModelState
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Rdzeń (iii) Dynamicznie twórz instancje za pomocą ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Rdzeń (2) Restart aplikacji za pomocą kodu
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) korzysta z buforowania Redis
https://www.itsvse.com/thread-9393-1-1.html
Opublikowano 4.04.2022 o 15:02:24 |
Naucz się uczyć
Opublikowano 2022-4-13 08:58:42 |
To jest dobre, podoba mi się. Dzięki za podzielenie się!
Opublikowano 2022-4-14 09:46:41 |
Naucz się działać wielkiego faceta, dziękuję za podzielenie się
Opublikowano 2022-8-5 16:25:05 |
Szef ciężko pracował
 Ziemianin| Opublikowano 2024-11-25 10:33:43 |
SixLabors.ImageSharp to także świetna biblioteka do wieloplatformowego przetwarzania obrazów
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com