Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 38588|Yanıt: 6

[.NET Core] ASP.NET Core (on dört) SkiaSharp image captcha'sına dayanmaktadır

[Bağlantıyı kopyala]
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:

asp.net mvc güzel görüntü captcha
https://www.itsvse.com/thread-4911-1-1.html

WebAPI, grafiksel doğrulama kodu fonksiyonunu uygular
https://www.itsvse.com/thread-7304-1-1.html

.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ı:

Linux fotoğraflarında .NET Core su nişanı sorunları
https://www.itsvse.com/thread-9605-1-1.html

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ütfenYanıt


(Son)




Önceki:[Dön]. NET 6 Yeni Özellik Enumerable.Chunk()
Önümüzdeki:Angular, ebeveyn tıklama olayının tetiklenmesini engeller
 Ev sahibi| 2022-4-4 tarihinde yayınlandı 12:28:35 |
eleştiri

ASP.NET Core (XIII) ile Ajax talebi olup olmadığını belirlemek için
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (on iki) ön uç JS, CSS paketleme ve sıkıştırma
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET Core (XI) uç nokta rotası, tüm DI servislerini görüntülemek için middleware ekler
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Core(10)'daki Konfigürasyon önceliklerinin ayrıntılı açıklaması.
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Core'un Middleware ara yazılımının ayrıntılı açıklaması (9).
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET Core Middleware'in ayrıntılı açıklaması
https://www.itsvse.com/thread-8126-1-1.html

ASP.NET Core(8)'deki Swagger arayüzünün varsayılan parametrelerinin bir yuvası.
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Core (7) Framework kaynak kodunun derinlemesine analizi
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI, nesneleri enjekte etme yöntemini manuel olarak elde eder
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (beş) CAP dağıtık işlemlere dayanmaktadır
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Core(4) filtresi birleşik ModelState model validasyonu
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Core (iii) ActivatorUtilities kullanarak dinamik örnekler oluşturun
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Çekirdek (2) Uygulamayı kodla yeniden başlat
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) Redis önbellekleme kullanır
https://www.itsvse.com/thread-9393-1-1.html
2022-4-4 15:02:24 tarihinde yayınlandı |
Öğrenmeyi öğren
2022-4-13 08:58:42 tarihinde yayınlandı |
Bu iyi, hoşuma gidiyor. Paylaştığın için teşekkürler!
2022-4-14 09:46:41 tarihinde yayınlandı |
Büyük adamın işleyişini öğren, paylaştığın için teşekkürler
2022-8-5 tarihinde 16:25:05 tarihinde yayınlandı |
Patron çok çalıştı
 Ev sahibi| 2024-11-25 10:33:43 tarihinde yayınlandı |
SixLabors.ImageSharp ayrıca çapraz platform görüntü işleme için harika bir kütüphanedir
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com