Anteriormente, al desarrollar proyectos ASP.NET usando el .NET Framework, todos se desplegaban en sistemas Windows y no podían ser multiplataforma, por lo que puedes usar System.Drawing para generar códigos de verificación de imágenes, de la siguiente manera:
Desarrollar en línea con proyectos .NET Core, generar captchas de imagen requiere referencia a la biblioteca System.Drawing.Common, pero por ahoraEl paquete System.Drawing.Common de NuGet ahora se agrupa como:WindowsBibliotecas específicas。 Al compilar para sistemas operativos no Windows, el Analizador de Plataforma avisa en tiempo de compilación. Como se muestra en la siguiente figura:
Este sitio de llamadas está disponible en todas las plataformas. 'Fuente' solo se soporta en 'Windows'.
Antes de .NET 6, usar el paquete System.Drawing.Common no generaba ninguna advertencia en tiempo de compilación ni se generaban excepciones en tiempo de ejecución. A partir de .NET 6, el Platform Analyzer emite una advertencia en tiempo de compilación al compilar código de referencia para sistemas operativos que no son Windows. Además, a menos que la opción de configuración esté activada, se lanzará la siguiente excepción en tiempo de ejecución:
System.TypeInitializationException : El inicializador de tipo para 'Gdip' generaba una excepción. ---- System.PlatformNotSupportedException : System.Drawing.Common no es compatible en plataformas que no sean Windows. VerEl inicio de sesión del hipervínculo es visible.Para más información. Rastreo de pila: en System.Drawing.SafeNativeMethods.Gdip.GdipCreateBitmapFromFile(String filename, IntPtr& bitmap) /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(42,0): en System.Drawing.Bitmap.. ctor(Nombre de archivo de cadena, useIcm booleano) /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(25,0): en System.Drawing.Bitmap.. ctor (Nombre de archivo de cadena) /_/src/libraries/System.ResourcesManager/tests/ResourceManagerTests.cs(270,0): en System.Resources.Tests.ResourceManagerTests.EnglishImageResourceData()+ MoveNext() /_/src/libraries/System.Linq/src/System/Linq/Select.cs(136,0): at System.Linq.Enumerable.SelectEnumerableIterator'2.MoveNext() ----- Traza de la pila interior ----- /_/src/libraries/System.Drawing.Common/src/System/Drawing/LibraryResolver.cs(31,0): en System.Drawing.LibraryResolver.EnsureRegistered() /_/src/libraries/System.Drawing.Common/src/System/Drawing/GdiplusNative.Unix.cs(65,0): en System.Drawing.SafeNativeMethods.Gdip.PlatformInitialize() /_/src/libraries/System.Drawing.Common/src/System/Drawing/Gdiplus.cs(27,0): en System.Drawing.SafeNativeMethods.Gdip.. cctor() Referencia de error:
Para el procesamiento de imágenes multiplataforma, la documentación oficial de Microsoft recomienda utilizar las siguientes librerías:
- ImageSharp
- SkiaSharp
- Microsoft.Maui.Graphics
Referencia:El inicio de sesión del hipervínculo es visible.
Este artículo utiliza la biblioteca SkiaSharp para generar CAPTCHA gráfico,SkiaSharp es una API gráfica 2D multiplataforma para la plataforma .NET basada en la biblioteca gráfica Skia (skia.org) de Google.。 Ofrece una API 2D completa que puede usarse en modelos móviles, servidores y escritorios para renderizar imágenes.
Dirección:El inicio de sesión del hipervínculo es visible.
Primero, crea un nuevo proyecto y referencia de ASP.NET Core 6SkiaSharpLas bibliotecas relevantes son las siguientes:
Ten en cuenta que si el proyecto necesita desplegarse en un sistema Linux, se requieren referenciasSkiaSharp.NativeAssets.Linuxde lo contrario, el error será el siguiente:
03 abr 18:51:06 raspberrypi dotnet[6203]: fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1] 03 de abril 18:51:06 raspberrypi dotnet[6203]: Ha ocurrido una excepción no gestionada durante la ejecución de la solicitud. 03 de abril 18:51:06 raspberrypi dotnet[6203]: System.TypeInitializationException: El inicializador de tipo para 'SkiaSharp.SKImageInfo' lanzó una excepción. 03 abr 18:51:06 raspberrypi dotnet[6203]: ---> System.DllNotFoundException: No se puede cargar la biblioteca compartida 'libSkiaSharp' ni una de sus dependencias. Para ayudar a diagnosticar problemas de carga, considera establecer la variable de entorno LD_DEBUG: liblibSkiaSharp: cannot open shared object file: No hay tal archivo ni directorio 03 de abril 18:51:06 raspberrypi dotnet[6203]: en SkiaSharp.SkiaApi.sk_colortype_get_default_8888() 03 abr 18:51:06 raspberrypi dotnet[6203]: en SkiaSharp.SKImageInfo:. cctor() 03 de abril 18:51:06 raspberrypi dotnet[6203]: --- Fin de la pista de la pila de excepciones internas --- 03 de abril 18:51:06 raspberrypi dotnet[6203]: en HomeCloud.ImageCaptcha.GetCaptcha(String captchaText, Int32 width, Int32 height, Int32 lineNum, Int32 lineStrookeWidth) en C: \Usuarios\itsvse_pc\fuente\repos\ConsoleApp1\HomeCloud\ImageCaptcha.cs:línea 184 03 abr 18:51:06 raspberrypi dotnet[6203]: en HomeCloud.Controllers.HomeController.Test() en C:\Users\itsvse_pc\source\repos\ConsoleApp1\HomeCloud\Controllers\HomeController.cs :línea 80 Abr 03 18:51:06 raspberrypi dotnet[6203]: a lambda_method34(Cierre , Objeto, Objeto[] ) Para considerar que algunas fuentes pueden faltar bajo diferentes sistemas, lo que resulta en la imposibilidad de mostrar la información del código de verificación de forma normal, necesitamos copiar manualmente las fuentes en el proyecto, crear una nueva carpeta de fuentes en el proyecto y copiar las fuentes en ella, como se muestra en la figura siguiente:
La configuración es la siguiente:
Según los materiales de referencia en Internet, el código gráfico de verificación generado por la prueba es el siguiente:
El CAPTCHA generado tiene dos desventajas:El CAPTCHA es completamente negro (fácilmente reconocible por OCR), y las letras CAPTCHA están agrupadas sin ningún espacioPara resolver estos dos problemas, optimicé el código de la siguiente manera:
El código del controlador de HomeController es el siguiente:
Las representaciones finales son las siguientes:
Finalmente, adjunta el archivo de fuente:
Turistas, si queréis ver el contenido oculto de esta publicación, por favor Respuesta
(Fin)
|