Aiemmin, kun kehitettiin ASP.NET projekteja .NET Frameworkilla, ne kaikki otettiin käyttöön Windows-järjestelmissä, eikä niitä voitu käyttää monialustaisesti, joten System.Drawingia voi käyttää kuvantarkistuskoodien luomiseen seuraavasti:
Verkkokehittäminen .NET Core -projekteilla ja kuvien captcha-generointi vaatii viittausta System.Drawing.Common-kirjastoon, mutta toistaiseksiSystem.Drawing.Common NuGet-paketti on nyt ryhmitelty seuraavasti:WindowsErityiset kirjastot。 Kun käännetään ei-Windows-käyttöjärjestelmille, Platform Analyzer varoittaa käännösvaiheessa. Kuten seuraavassa kuvassa näkyy:
Tämä puhelusivusto on käytettävissä kaikilla alustoilla. 'Fontti' on tuettu vain 'ikkunoissa'.
Ennen .NET 6:ta System.Drawing.Common -paketin käyttö ei tuottanut käännösaikavaroituksia eikä ajonaikaisia poikkeuksia. .NET 6:sta alkaen Platform Analyzer antaa käännösaikavaroituksen, kun viitekoodia käännetään ei-Windows-käyttöjärjestelmille. Lisäksi, ellei konfiguraatiovaihtoehtoa ole asetettu, seuraava ajonaikainen poikkeus otetaan käyttöön:
System.TypeInitializationException : 'Gdip'-tyypin alustaja heitti poikkeuksen. ---- System.PlatformNotSupportedException : System.Drawing.Common ei ole tuettu ei-Windows-alustoilla. NähdäHyperlinkin kirjautuminen on näkyvissä.Lisätietoja varten. Pinon jäljitys: osoitteessa System.Drawing.SafeNativeMethods.Gdip.GdipCreateBitmapFromFile(Merkkijonon tiedostonimi, IntPtr&bitmap) /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(42,0): osoitteessa System.Drawing.Bitmap.. ctor(Merkkijonon tiedostonimi, Boolen useIcm) /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(25,0): osoitteessa System.Drawing.Bitmap.. ctor(Merkkijonon tiedostonimi) /_/src/libraries/System.Resources.ResourceManager/tests/ResourceManagerTests.cs(270,0): osoitteessa System.Resources.Tests.ResourceManagerTests.EnglishImageResourceData()+ MoveNext() /_/src/libraries/System.Linq/src/System/Linq/Select.cs(136,0): osoitteessa System.Linq.Enumerable.SelectEnumerableIterator'2.MoveNext() ----- Sisäpinon jäljitys ----- /_/src/libraries/System.Drawing.Common/src/System/Drawing/LibraryResolver.cs(31,0): osoitteessa System.Drawing.LibraryResolver.EnsureRegistered() /_/src/libraries/System.Drawing.Common/src/System/Drawing/GdiplusNative.Unix.cs(65,0): osoitteessa System.Drawing.SafeNativeMethods.Gdip.PlatformInitialize() /_/src/libraries/System.Drawing.Common/src/System/Drawing/Gdiplus.cs(27,0): osoitteessa System.Drawing.SafeNativeMethods.Gdip.. cctor() Virheviittaus:
Monialustaiseen kuvankäsittelyyn Microsoftin virallinen dokumentaatio suosittelee seuraavien kirjastojen käyttöä:
- ImageSharp
- SkiaSharp
- Microsoft.Maui.Graphics
Viittaus:Hyperlinkin kirjautuminen on näkyvissä.
Tämä artikkeli käyttää SkiaSharp-kirjastoa graafisen CAPTCHA:n tuottamiseen,SkiaSharp on monialustainen 2D-grafiikka-API .NET-alustalle, joka perustuu Googlen Skia-grafiikkakirjastoon (skia.org).。 Se tarjoaa kattavan 2D-rajapinnan, jota voidaan käyttää mobiili-, palvelin- ja työpöytämalleissa kuvien renderöintiin.
Osoite:Hyperlinkin kirjautuminen on näkyvissä.
Ensiksi luo uusi ASP.NET Core 6 -projekti ja viiteSkiaSharpAsiaankuuluvat kirjastot ovat seuraavat:
Huomaa, että jos projekti täytyy ottaa käyttöön Linux-järjestelmässä, viitteet vaaditaanSkiaSharp.NativeAssets.Linuxluokka, muuten virhe on seuraava:
Apr 03 18:51:06 raspberrypi dotnet[6203]: fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1] 3. huhtikuuta 18:51:06 raspberrypi dotnet[6203]: Pyynnön suorittamisen aikana on tapahtunut käsittelemätön poikkeus. 3. huhtikuuta 18:51:06 raspberrypi dotnet[6203]: System.TypeInitializationException: 'SkiaSharp.SKImageInfo' -tyyppien alustin heitti poikkeuksen. 3. huhtikuuta 18:51:06 raspberrypi dotnet[6203]: ---> System.DllNotFoundException: Jaettua kirjastoa 'libSkiaSharp' tai sen riippuvuutta ei voi ladata. Latausongelmien diagnosoinnin helpottamiseksi harkitse LD_DEBUG ympäristömuuttujan asettamista: liblibSkiaSharp: cannot open shared object file: No such file or directory 3. huhtikuuta 18:51:06 raspberrypi dotnet[6203]: at SkiaSharp.SkiaApi.sk_colortype_get_default_8888() 3. huhtikuuta 18:51:06 raspberrypi dotnet[6203]: SkiaSharp.SKImageInfo:. cctor() 3. huhtikuuta 18:51:06 raspberrypi dotnet[6203]: --- Sisäisen poikkeuksen pinon jäljityksen loppu --- 03. huhtikuuta 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:rivi 184 3. huhtikuuta 18:51:06 raspberrypi dotnet[6203]: osoitteessa HomeCloud.Controllers.HomeController.Test() in C:\Users\itsvse_pc\source\repos\ConsoleApp1\HomeCloud\Controllers\HomeController.cs :rivi 80 3. huhtikuuta 18:51:06 raspberrypi dotnet[6203]: klo lambda_method34(Sulkeminen, objekti, objekti[] ) Jotta voidaan ottaa huomioon, että jotkin fonttifontit saattavat puuttua eri järjestelmissä ja estää varmistuskooditietoja normaalisti näyttämästä, meidän täytyy kopioida fontit manuaalisesti projektiin, luoda uusi fonttikansio projektiin ja kopioida fontit siihen, kuten alla olevassa kuvassa näkyy:
Konfiguraatio on seuraava:
Internetin viitemateriaalien mukaan testin tuottama graafinen varmennuskoodi on seuraava:
Generoidulla CAPTCHA:lla on kaksi haittaa:CAPTCHA on kokonaan musta (helposti tunnistettavissa OCR:llä), ja CAPTCHA-kirjaimet ovat ahtautuneet yhteen ilman väliäRatkaistakseni nämä kaksi ongelmaa optimoin koodin seuraavasti:
HomeController-ohjaimen koodi on seuraava:
Lopulliset renderöinnit ovat seuraavat:
Lopuksi liitä fonttitiedosto:
Turistit, jos haluatte nähdä tämän postauksen piilotetun sisällön, olkaa hyvä Vastaus
(Loppu)
|