|
|
2022-4-4 tarihinde 12:25:53 tarihinde yayınlandı
|
|
|
|

Daha önce, .NET Framework ile ASP.NET projeler geliştirilirken, hepsi Windows sistemlerinde konuşlandırılıyordu ve çapraz platform olamazdı, bu yüzden System.Drawing kullanarak aşağıdaki gibi görüntü doğrulama kodları oluşturabilirsiniz:
.NET Core projeleriyle çevrimiçi geliştirme yapmak için görüntü captchaları oluşturmak için System.Drawing.Common kütüphanesine başvuru yapmak gerekiyor, ancak şimdilikSystem.Drawing.Common NuGet paketi artık şu şekilde gruplanmıştır:WindowsÖzel kütüphaneler。 Windows dışı işletim sistemleri için derleme yapılırken, Platform Analyzer derleme sırasında uyarı verir. Aşağıdaki şekilde gösterildiği gibi:
Bu arama sitesi tüm platformlarda erişilebilirdir. 'Font' sadece 'pencereler'de desteklenir.
.NET 6'dan önce, System.Drawing.Common paketi kullanılmak derleme zamanı uyarısı üretmiyor ve çalışma zamanı istisnaları oluşturmazdı. .NET 6 ile başlayan Platform Analyzer, Windows dışı işletim sistemleri için referans kod derlerken derleme zamanı uyarısı verir. Ayrıca, yapılandırma seçeneği ayarlanmadıkça, aşağıdaki çalışma zamanı istisnası atılır:
System.TypeInitializationException : 'Gdip' için tür başlatıcısı bir istisna attı. ---- System.PlatformNotSupportedException : System.Drawing.Common Windows dışı platformlarda desteklenmemektedir. GörmekBağlantı girişi görünür.Daha fazla bilgi için. Stack Trace: at System.Drawing.SafeNativeMethods.Gdip.GdipCreateBitmapFromFile(String dosya adı, IntPtr&bitmap) /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(42,0): System.Drawing.Bitmap adresinde.. ctor(Dizi dosya adı, Boolean useIcm) /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(25,0): System.Drawing.Bitmap adresinde.. ctor(Dizi dosya adı) /_/src/libraries/System.Resources.ResourceManager/tests/ResourceManagerTests.cs(270,0): System.Resources.Tests.ResourceManagerTests.EnglishImageResourceData()+ adresinde MoveNext() /_/src/libraries/System.Linq/src/System/Linq/Select.cs(136,0): System.Linq.Enumerable.SelectEnumerableIterator'2.MoveNext() adresinde ----- İç Yığın İzi ----- /_/src/libraries/System.Drawing.Common/src/System/Drawing/LibraryResolver.cs(31,0): System.Drawing.LibraryResolver.EnsureRegistered() adresinde /_/src/libraries/System.Drawing.Common/src/System/Drawing/GdiplusNative.Unix.cs(65,0): System.Drawing.SafeNativeMethods.Gdip.PlatformInitialize() adresinde /_/src/libraries/System.Drawing.Common/src/System/Drawing/Gdiplus.cs(27,0): System.Drawing.SafeNativeMethods.Gdip.. cctor() Hata Referansı:
Platformlar arası görüntü işleme için Microsoft'un resmi dokümantasyonu aşağıdaki kütüphanelerin kullanılmasını önerir:
- ImageSharp
- SkiaSharp
- Microsoft.Maui.Graphics
Referans:Bağlantı girişi görünür.
Bu makale, grafiksel CAPTCHA oluşturmak için SkiaSharp kütüphanesini kullanır,SkiaSharp, Google'ın Skia grafik kütüphanesine (skia.org) dayanan .NET platformu için çapraz platformlu bir 2D grafik API'sidir.。 Mobil ve sunucu modelleri arasında kullanılabilen kapsamlı bir 2D API sunar; bu API görüntüleri render etmek için kullanır.
Adres:Bağlantı girişi görünür.
Öncelikle, yeni bir ASP.NET Core 6 projesi oluşturun ve referans oluşturunSkiaSharpİlgili kütüphaneler şunlardır:
Projenin bir Linux sistemine dağıtılması gerekiyorsa, referansların zorunlu olduğunu unutmayınSkiaSharp.NativeAssets.Linuxsınıf, aksi takdirde hata şu şekilde olur:
Apr 03 18:51:06 raspberrypi dotnet[6203]: fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1] 03 Nisan 18:51:06 raspberrypi dotnet[6203]: İstek yürütülürken yönetilmemiş bir istisna meydana geldi. 03 Nsan 18:51:06 raspberrypi dotnet[6203]: System.TypeInitializationException: 'SkiaSharp.SKImageInfo' için tür başlatıcısı bir istisna attı. 03 Nsan 18:51:06 raspberrypi dotnet[6203]: ---> System.DllNotFoundException: 'libSkiaSharp' paylaşılan kütüphane veya bağımlılıklarından birini yüklenemiyor. Yükleme sorunlarını teşhis etmek için LD_DEBUG ortam değişkenini ayarlayın: liblibSkiaSharp: paylaşılan nesne dosyasını açamıyor: Böyle bir dosya veya dizin yok 03 Nisan 18:51:06 raspberrypi dotnet[6203]: at SkiaSharp.SkiaApi.sk_colortype_get_default_8888() 03 Nsan 18:51:06 raspberrypi dotnet[6203]: SkiaSharp.SKImageInfo:. cctor() 03 Nisan 18:51:06 raspberrypi dotnet[6203]: --- İç istisna yığını izinin sonu --- 03 Nisan 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 03 Nisan 18:51:06 raspberrypi dotnet[6203]: at HomeCloud.Controllers.HomeController.Test() in C:\Users\itsvse_pc\source\repos\ConsoleApp1\HomeCloud\Controllers\HomeController.cs :hat 80 03 Nisan 18:51:06 raspberrypi dotnet[6203]: at lambda_method34(Kapatma , Nesne, Nesne[] ) Bazı font fontlarının farklı sistemlerde eksik olabileceğini ve bu nedenle doğrulama kodu bilgilerinin normal şekilde görüntülenememesine yol açabileceğini göz önünde bulundurmak için, fontları projeye manuel olarak kopyalamamız, projede yeni bir font klasörü oluşturmamız ve fontları aşağıdaki şekilde kopyalamamız gerekir:
Konfigürasyon şöyledir:
İnternetteki referans materyallerine göre, test tarafından oluşturulan grafiksel doğrulama kodu şu şekildedir:
Üretilen CAPTCHA'nın iki dezavantajı vardır:CAPTCHA tamamen siyahtır (OCR tarafından kolayca tanınır) ve CAPTCHA harfleri arada sıkışmış ve aralı bir şekilde yer almıştırBu iki sorunu çözmek için kodu şu şekilde optimize ettim:
HomeController kontrolcü kodu şöyledir:
Son renderler şunlardır:
Son olarak, font dosyasını ekleyin:
Turistler, bu gönderinin gizli içeriğini görmek isterseniz lütfen Yanıt
(Son)
|
Önceki:[Dön]. NET 6 Yeni Özellik Enumerable.Chunk()Önümüzdeki:Angular, ebeveyn tıklama olayının tetiklenmesini engeller
|