Anksčiau, kuriant ASP.NET projektus naudojant .NET Framework, jie visi buvo įdiegti "Windows" sistemose ir negalėjo būti kelių platformų, todėl galite naudoti System.Drawing vaizdo tikrinimo kodams generuoti taip:
Kuriant internete su .NET Core projektais, norint generuoti vaizdų captchas, reikia nuorodos į System.Drawing.Common biblioteką, bet kol kasSystem.Drawing.Common NuGet paketas dabar sugrupuotas kaip:WindowsKonkrečios bibliotekos。 Kompiliuojant ne "Windows" operacinėms sistemoms, platformos analizatorius įspėja kompiliavimo metu. Kaip parodyta šiame paveikslėlyje:
Ši skambinimo svetainė pasiekiama visose platformose. "Šriftas" palaikomas tik "Windows".
Prieš .NET 6 naudojant System.Drawing.Common paketą nebuvo generuojami jokie kompiliavimo laiko įspėjimai ir nepateikiamos jokios vykdymo laiko išimtys. Pradedant nuo .NET 6, platformos analizatorius pateikia kompiliavimo laiko įspėjimą, kai kompiliuoja ne "Windows" operacinių sistemų nuorodos kodą. Be to, jei nenustatyta konfigūracijos parinktis, bus pateikta ši vykdymo laiko išimtis:
System.TypeInitializationException : Gdip tipo iniciatorius pateikė išimtį. ---- System.PlatformNotSupportedException : System.Drawing.Common nepalaikoma ne Windows platformose. MatytiHipersaito prisijungimas matomas.Norėdami gauti daugiau informacijos. Rietuvės sekimas: System.Drawing.SafeNativeMethods.Gdip.GdipCreateBitmapFromFile(Eilutės failo pavadinimas, IntPtr& bitmap) /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(42,0): System.Drawing.Bitmap.. ctor(Eilutės failo pavadinimas, Bulio logikos naudojimasIcm) /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(25,0): System.Drawing.Bitmap.. ctor(Eilutės failo pavadinimas) /_/src/libraries/System.Resources.ResourceManager/tests/ResourceManagerTests.cs(270,0): adresu System.Resources.Tests.ResourceManagerTests.EnglishImageResourceData()+ PerkeltiKitas() /_/src/libraries/System.Linq/src/System/Linq/Select.cs(136,0): System.Linq.Enumerable.SelectEnumerableIterator'2.MoveNext() ----- vidinio rietuvės sekimo ----- /_/src/libraries/System.Drawing.Common/src/System/Drawing/LibraryResolver.cs(31,0): System.Drawing.LibraryResolver.EnsureRegistered() /_/src/libraries/System.Drawing.Common/src/System/Drawing/GdiplusNative.Unix.cs(65,0): System.Drawing.SafeNativeMethods.Gdip.PlatformInitialize() /_/src/libraries/System.Drawing.Common/src/System/Drawing/Gdiplus.cs(27,0): System.Drawing.SafeNativeMethods.Gdip.. cctor() Klaidos nuoroda:
Kelių platformų vaizdų apdorojimui oficialioje "Microsoft" dokumentacijoje rekomenduojama naudoti šias bibliotekas:
- "ImageSharp"
- SkiaSharp
- Microsoft.Maui.Grafika
Nuoroda:Hipersaito prisijungimas matomas.
Šiame straipsnyje naudojama "SkiaSharp" biblioteka grafiniam CAPTCHA generuoti,"SkiaSharp" yra kelių platformų 2D grafikos API, skirta .NET platformai, pagrįsta "Google" "Skia" grafikos biblioteka (skia.org).。 Ji siūlo išsamią 2D API, kurią galima naudoti mobiliuosiuose, serverių ir stalinių kompiuterių modeliuose vaizdams atvaizduoti.
Adresas:Hipersaito prisijungimas matomas.
Pirmiausia sukurkite naują "ASP.NET Core 6" projektą ir nuorodąSkiaSharpAtitinkamos bibliotekos yra šios:
Atkreipkite dėmesį, kad jei projektą reikia įdiegti Linux sistemoje, reikalingos nuorodosSkiaSharp.NativeAssets.Linuxklasė, kitaip klaida bus tokia:
Apr 03 18:51:06 raspberrypi dotnet[6203]: fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1] Apr 03 18:51:06 raspberrypi dotnet[6203]: Vykdant užklausą įvyko neapdorota išimtis. Apr 03 18:51:06 raspberrypi dotnet[6203]: System.TypeInitializationException: 'SkiaSharp.SKImageInfo' tipo iniciatorius išmetė išimtį. Apr 03 18:51:06 raspberrypi dotnet[6203]: ---> System.DllNotFoundException: Neįmanoma įkelti bendrai naudojamos bibliotekos "libSkiaSharp" arba vienos iš jos priklausomybių. Norėdami padėti diagnozuoti įkėlimo problemas, apsvarstykite galimybę nustatyti LD_DEBUG aplinkos kintamąjį: liblibSkiaSharp: negali atidaryti bendrai naudojamo objekto failo: nėra tokio failo ar katalogo Apr 03 18:51:06 raspberrypi dotnet[6203]: at SkiaSharp.SkiaApi.sk_colortype_get_default_8888() Apr 03 18:51:06 raspberrypi dotnet[6203]: at SkiaSharp.SKImageInfo:. cctor() Apr 03 18:51:06 raspberrypi dotnet[6203]: --- Vidinės išimties rietuvės sekimo --- pabaiga 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]: at HomeCloud.Controllers.HomeController.Test() in C:\Users\itsvse_pc\source\repos\ConsoleApp1\HomeCloud\Controllers\HomeController.cs :80 eilutė Apr 03 18:51:06 raspberrypi dotnet[6203]: at lambda_method34(Uždarymas , Objektas , Objektas[] ) Norėdami atsižvelgti į tai, kad kai kurių šriftų šriftų gali trūkti skirtingose sistemose, todėl neįmanoma normaliai rodyti patvirtinimo kodo informacijos, turime rankiniu būdu nukopijuoti šriftus į projektą, projekte sukurti naują šriftų aplanką ir nukopijuoti šriftus į jį, kaip parodyta paveikslėlyje žemiau:
Konfigūracija yra tokia:
Remiantis informacine medžiaga internete, bandymo metu sugeneruotas grafinis patvirtinimo kodas yra toks:
Sukurtas CAPTCHA turi du trūkumus:CAPTCHA yra juoda (lengvai atpažįstama OCR), o CAPTCHA raidės yra perkrautos be jokių tarpųNorėdami išspręsti šias dvi problemas, optimizavau kodą taip:
"HomeController" valdiklio kodas yra toks:
Galutiniai atvaizdai yra tokie:
Galiausiai pridėkite šrifto failą:
Turistai, jei norite pamatyti paslėptą šio įrašo turinį, prašome Atsakyti
(Pabaiga)
|