Korábban, amikor ASP.NET projekteket fejlesztettek .NET keretrendszerrel, mind Windows rendszereken telepítettek, és nem lehettek többplatformosak, így a System.Drawing segítségével képellenőrző kódokat generálhatsz, az alábbiak szerint:
Az online fejlesztéshez .NET Core projektekkel, a kép captcha-k generálásához a System.Drawing.Common könyvtárra való hivatkozást igényel, de egyelőreA System.Drawing.Common NuGet csomag most a következőképpen csoportosítható:WindowsSpecifikus könyvtárak。 Nem Windows operációs rendszerekre való fordításkor a Platform Analyzer figyelmeztet a fordítás idején. Ahogy az alábbi ábrán látható:
Ez a hívóoldal minden platformon elérhető. A 'betűtípus' csak 'ablakok' esetén támogatott.
A .NET 6 előtt a System.Drawing.Common csomag használata nem generált fordítási idejű figyelmeztetéseket, és nem adott futtatóidejű kivételeket. A .NET 6-tól kezdve a Platform Analyzer fordítási időben figyelmeztetést ad ki a nem Windows operációs rendszerek referenciakódjának fordításakor. Továbbá, hacsak a konfigurációs opció be nem állítva, a következő futási kivétel kerül elő:
System.TypeInitializationException : A 'Gdip' típus inicializálója kivételt dobott. ---- System.PlatformNotSupportedException : System.Drawing.Common nem támogatott nem Windows platformokon. LátA hiperlink bejelentkezés látható.További információért. Stack Trace: a System.Drawing.SafeNativeMethods.Gdip.GdipCreateBitmapFromFile(String fájlnév, IntPtr&bitmap) címen /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(42,0): a System.Drawing.Bitmap.. ctor(String fájlnév, Boolean useIcm) /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(25,0): a System.Drawing.Bitmap.. ctor(String fájlnév) /_/src/libraries/System.Resources.ResourceManager/tests/ResourceManagerTests.cs(270,0): a System.Resources.Tests.ResourceManagerTests.EnglishImageResourceData()+ címen MoveNext() /_/src/libraries/System.Linq/src/System/Linq/Select.cs(136,0): a System.Linq.Enumerable.SelectEnumerableIterator'2.MoveNext() címen ----- Belső Stack Trace ----- /_/src/libraries/System.Drawing.Common/src/System/Drawing/LibraryResolver.cs(31,0): a System.Drawing.LibraryResolver.EnsureRegistered() címen /_/src/libraries/System.Drawing.Common/src/System/Drawing/GdiplusNative.Unix.cs(65,0): a System.Drawing.SafeNativeMethods.Gdip.PlatformInitialize() címen /_/src/libraries/System.Drawing.Common/src/System/Drawing/Gdiplus.cs(27,0): a System.Drawing.SafeNativeMethods.Gdip.. cctor() Hibahivatkozás:
A Microsoft hivatalos dokumentációja a többplatformos képfeldolgozáshoz a következő könyvtárak használatát javasolja:
- ImageSharp
- SkiaSharp
- Microsoft.Maui.Graphics
Utalás:A hiperlink bejelentkezés látható.
Ez a cikk a SkiaSharp könyvtárat használja grafikus CAPTCHA generálásához,A SkiaSharp egy cross-platformos 2D grafikus API a .NET platformhoz, amely a Google Skia grafikai könyvtárán (skia.org) alapul.。 Átfogó 2D API-t kínál, amely mobil, szerver és asztali modelleken is használható képek megjelenítésére.
Cím:A hiperlink bejelentkezés látható.
Először is, hozz létre egy új ASP.NET Core 6 projektet és hivatkozástSkiaSharpAz érintett könyvtárak a következők:
Fontos megjegyezni, hogy ha a projektet Linux rendszerre kell telepíteni, hivatkozásokra van szükségSkiaSharp.NativeAssets.Linuxosztály, különben a hiba a következő lesz:
Apr 03 18:51:06 raspberrypi dotnet[6203]: fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1] Apr 03 18:51:06 raspberrypi dotnet[6203]: A kérés végrehajtása közben kezeletlen kivétel történt. Apr 03 18:51:06 raspberrypi dotnet[6203]: System.TypeInitializationException: A 'SkiaSharp.SKImageInfo' típus-inicializátora kivételt dobott. Apr 03 18:51:06 raspberrypi dotnet[6203]: ---> System.DllNotFoundException: Nem lehet betölteni a 'libSkiaSharp' megosztott könyvtárat vagy valamelyik függőjét. A betöltési problémák diagnosztizálásához fontold meg a LD_DEBUG környezeti változót: liblibSkiaSharp: cannot open shared object file: No such file or directory Apr 03 18:51:06 raspberrypi dotnet[6203]: at SkiaSharp.SkiaApi.sk_colortype_get_default_8888() Apr 03 18:51:06 raspberrypi dotnet[6203]: a SkiaSharp.SKImageInfo:. cctor() Apr 03 18:51:06 raspberrypi dotnet[6203]: --- A belső exception stack trace vége --- Apr 03 18:51:06 raspberrypi dotnet[6203]: at HomeCloud.ImageCaptcha.GetCaptcha(String captchaText, Int32 width, Int32 height, Int32 lineNum, Int32 lineStrookeWidth) in C: \Users\itsvse_pc\source\repos\ConsoleApp1\HomeCloud\ImageCaptcha.cs:line 184 Apr 03 18:51:06 raspberrypi dotnet[6203]: a HomeCloud.Controllers.HomeController.Test() címen C:\Users\itsvse_pc\source\repos\ConsoleApp1\HomeCloud\Controllers\HomeController.cs :80-as vonal Apr 03 18:51:06 raspberrypi dotnet[6203]: at lambda_method34(Zárás, Tárgy, Tárgy[] ) Ahhoz, hogy figyelembe vegyük, hogy egyes betűtípusok hiányozhatnak különböző rendszerekben, ami miatt nem lehet normál módon megjeleníteni az ellenőrző kód információkat, kézzel kell átmásolnunk a betűtípusokat a projektbe, létrehozni egy új betűtípusok mappát a projektben, és bemásolni a betűtípusokat, ahogy az alábbi ábrán látható:
A konfiguráció a következő:
Az interneten található referenciaanyagok szerint a teszt által generált grafikus ellenőrző kód a következő:
A generált CAPTCHA-nak két hátránya van:A CAPTCHA teljesen fekete (az OCR könnyen felismeri), és a CAPTCHA betűk egymáshoz tömörülnek, szóköz nélkülE két probléma megoldásához a kódot a következőképpen optimalizáltam:
A HomeController vezérlőkód a következő:
A végső képek a következők:
Végül csatold hozzá a betűtípus fájlt:
Turisták, ha szeretnétek megnézni ennek a bejegyzésnek a rejtett tartalmát, kérlek Válasz
(Vége)
|