Προηγουμένως, κατά την ανάπτυξη έργων ASP.NET χρησιμοποιώντας το .NET Framework, όλα αναπτύσσονταν σε συστήματα Windows και δεν μπορούσαν να είναι cross-platform, επομένως μπορείτε να χρησιμοποιήσετε το System.Drawing για να δημιουργήσετε κωδικούς επαλήθευσης εικόνας, ως εξής:
Η ανάπτυξη online με έργα .NET Core, η δημιουργία captcha εικόνων απαιτεί αναφορά στη βιβλιοθήκη System.Drawing.Common, αλλά προς το παρόνΤο πακέτο System.Drawing.Common NuGet ομαδοποιείται πλέον ως:παράθυραΕιδικές βιβλιοθήκες。 Κατά τη μεταγλώττιση για λειτουργικά συστήματα που δεν είναι Windows, το Platform Analyzer προειδοποιεί κατά τη μεταγλώττιση. Όπως φαίνεται στο παρακάτω σχήμα:
Αυτός ο ιστότοπος κλήσεων είναι προσβάσιμος σε όλες τις πλατφόρμες. Η «Γραμματοσειρά» υποστηρίζεται μόνο στα «παράθυρα».
Πριν από το .NET 6, η χρήση του πακέτου System.Drawing.Common δεν δημιουργούσε προειδοποιήσεις χρόνου μεταγλώττισης και δεν δημιουργούσε εξαιρέσεις χρόνου εκτέλεσης. Ξεκινώντας με το .NET 6, το Platform Analyzer εκδίδει μια προειδοποίηση χρόνου μεταγλώττισης κατά τη μεταγλώττιση κώδικα αναφοράς για λειτουργικά συστήματα που δεν είναι Windows. Επίσης, εκτός εάν έχει οριστεί η επιλογή διαμόρφωσης, θα εμφανιστεί η ακόλουθη εξαίρεση χρόνου εκτέλεσης:
System.TypeInitializationException : Ο αρχικοποιητής τύπου για το 'Gdip' έριξε μια εξαίρεση. ---- System.PlatformNotSupportedException : Το System.Drawing.Common δεν υποστηρίζεται σε πλατφόρμες που δεν είναι Windows. ΒλέπωΗ σύνδεση με υπερσύνδεσμο είναι ορατή.για περισσότερες πληροφορίες. Ίχνος στοίβας: στο System.Drawing.SafeNativeMethods.Gdip.GdipCreateBitmapFromFile(Όνομα αρχείου συμβολοσειράς, IntPtr& bitmap) /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(42,0): στο System.Drawing.Bitmap.. ctor(Όνομα αρχείου συμβολοσειράς, δυαδική χρήσηIcm) /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(25,0): στο System.Drawing.Bitmap.. ctor(Όνομα αρχείου συμβολοσειράς) /_/src/libraries/System.Resources.ResourceManager/tests/ResourceManagerTests.cs(270,0): στο System.Resources.Tests.ResourceManagerTests.EnglishImageResourceData()+ ΜετακίνησηΕπόμενο() /_/src/libraries/System.Linq/src/System/Linq/Select.cs(136,0): στο System.Linq.Enumerable.SelectEnumerableIterator'2.MoveNext() ----- Ανίχνευση εσωτερικής στοίβας ----- /_/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() Αναφορά σφάλματος:
Για επεξεργασία εικόνας μεταξύ πλατφορμών, η επίσημη τεκμηρίωση της Microsoft συνιστά τη χρήση των ακόλουθων βιβλιοθηκών:
- ΕικόναSharp
- ΣκιάΣαρπ
- Microsoft.Maui.Γραφικά
Αναφορά:Η σύνδεση με υπερσύνδεσμο είναι ορατή.
Αυτό το άρθρο χρησιμοποιεί τη βιβλιοθήκη SkiaSharp για τη δημιουργία γραφικών CAPTCHA,Το SkiaSharp είναι ένα API γραφικών 2D πολλαπλών πλατφορμών για την πλατφόρμα .NET που βασίζεται στη βιβλιοθήκη γραφικών Skia της Google (skia.org).。 Προσφέρει ένα ολοκληρωμένο 2D API που μπορεί να χρησιμοποιηθεί σε μοντέλα κινητών, διακομιστών και επιτραπέζιων υπολογιστών για την απόδοση εικόνων.
Διεύθυνση:Η σύνδεση με υπερσύνδεσμο είναι ορατή.
Αρχικά, δημιουργήστε ένα νέο έργο ASP.NET Core 6 και αναφοράΣκιάΣαρπΟι σχετικές βιβλιοθήκες είναι οι εξής:
Σημειώστε ότι εάν το έργο πρέπει να αναπτυχθεί σε σύστημα Linux, απαιτούνται αναφορέςSkiaSharp.NativeAssets.Linuxτάξη, διαφορετικά το σφάλμα θα είναι το εξής:
Apr 03 18:51:06 raspberrypi dotnet[6203]: fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1] Apr 03 18:51:06 raspberrypi dotnet[6203]: Παρουσιάστηκε μια ανεπίλυτη εξαίρεση κατά την εκτέλεση του αιτήματος. Apr 03 18:51:06 raspberrypi dotnet[6203]: System.TypeInitializationException: Ο αρχικοποιητής τύπου για το 'SkiaSharp.SKImageInfo' έριξε μια εξαίρεση. Apr 03 18:51:06 raspberrypi dotnet[6203]: ---> System.DllNotFoundException: Δεν είναι δυνατή η φόρτωση της κοινόχρηστης βιβλιοθήκης 'libSkiaSharp' ή μιας από τις εξαρτήσεις της. Για να βοηθήσετε στη διάγνωση προβλημάτων φόρτωσης, εξετάστε το ενδεχόμενο να ορίσετε τη μεταβλητή περιβάλλοντος LD_DEBUG: liblibSkiaSharp: δεν είναι δυνατό το άνοιγμα κοινόχρηστου αρχείου αντικειμένου: Δεν υπάρχει τέτοιο αρχείο ή κατάλογος Apr 03 18:51:06 raspberrypi dotnet[6203]: στις SkiaSharp.SkiaApi.sk_colortype_get_default_8888() Apr 03 18:51:06 raspberrypi dotnet[6203]: στο SkiaSharp.SKImageInfo:. cctor() Apr 03 18:51:06 raspberrypi dotnet[6203]: --- Τέλος του ίχνους στοίβας εσωτερικής εξαίρεσης --- Apr 03 18:51:06 raspberrypi dotnet[6203]: στο HomeCloud.ImageCaptcha.GetCaptcha(Συμβολοσειρά captchaText, Int32 πλάτος, Int32 ύψος, Int32 lineNum, Int32 lineStrookeWidth) στο C: \Χρήστες\itsvse_pc\πηγή\repos\ConsoleApp1\HomeCloud\ImageCaptcha.cs:γραμμή 184 Apr 03 18:51:06 raspberrypi dotnet[6203]: στο HomeCloud.Controllers.HomeController.Test() στο C:\Users\itsvse_pc\source\repos\ConsoleApp1\HomeCloud\Controllers\HomeController.cs :γραμμή 80 Apr 03 18:51:06 raspberrypi dotnet[6203]: στις lambda_method34(Κλείσιμο , Αντικείμενο , Αντικείμενο[] ) Για να θεωρήσουμε ότι ορισμένες γραμματοσειρές ενδέχεται να λείπουν σε διαφορετικά συστήματα, με αποτέλεσμα την αδυναμία κανονικής εμφάνισης πληροφοριών κωδικού επαλήθευσης, πρέπει να αντιγράψουμε με μη αυτόματο τρόπο τις γραμματοσειρές στο έργο, να δημιουργήσουμε έναν νέο φάκελο γραμματοσειρών στο έργο και να αντιγράψουμε τις γραμματοσειρές σε αυτόν, όπως φαίνεται στο παρακάτω σχήμα:
Η διαμόρφωση έχει ως εξής:
Σύμφωνα με τα υλικά αναφοράς στο Διαδίκτυο, ο γραφικός κωδικός επαλήθευσης που δημιουργείται από τη δοκιμή είναι ο εξής:
Το CAPTCHA που δημιουργείται έχει δύο μειονεκτήματα:Το CAPTCHA είναι όλο μαύρο (αναγνωρίζεται εύκολα από το OCR) και τα γράμματα CAPTCHA είναι συνωστισμένα μεταξύ τους χωρίς κανένα κενόΓια να λύσω αυτά τα δύο προβλήματα, βελτιστοποίησα τον κώδικα ως εξής:
Ο κωδικός του χειριστηρίου HomeController είναι ο εξής:
Οι τελικές απεικονίσεις είναι οι εξής:
Τέλος, επισυνάψτε το αρχείο γραμματοσειράς:
Τουρίστες, αν θέλετε να δείτε το κρυφό περιεχόμενο αυτής της ανάρτησης, παρακαλώ Απάντηση
(Τέλος)
|