Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 38588|Respuesta: 6

[.NET Core] ASP.NET Core (catorce) está basado en el captcha de imagen SkiaSharp

[Copiar enlace]
Publicado el 4-4-2022 a las 12:25:53 | | | |
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:

asp.net captcha de imagen hermosa MVC
https://www.itsvse.com/thread-4911-1-1.html

WebAPI implementa la función de código de verificación gráfica
https://www.itsvse.com/thread-7304-1-1.html

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:

Problemas con la marca de agua de .NET Core en imágenes de Linux
https://www.itsvse.com/thread-9605-1-1.html

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 favorRespuesta


(Fin)




Anterior:[Gira]. NET 6 Nueva Funcionalidad Enumerable.Chunk()
Próximo:Angular evita que se active el evento de clic padre
 Propietario| Publicado el 4-4-2022 a las 12:28:35 |
revisión

ASP.NET Core (XIII) para determinar si es una solicitud Ajax o no
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (doce) JS front-end, empaquetado y compresión CSS
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET ruta Core (XI) añade middleware para mostrar todos los servicios DI
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Explicación detallada de las prioridades de configuración en Core(10).
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Explicación detallada del middleware Middleware de Core (9).
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET Explicación detallada del Middleware Core
https://www.itsvse.com/thread-8126-1-1.html

ASP.NET pozo de los parámetros predeterminados de la interfaz Swagger en Core(8).
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Núcleo (7) Análisis en profundidad del código fuente del framework
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI obtiene manualmente el método de inyectar objetos
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (cinco) se basa en transacciones distribuidas CAP
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Validación unificada de modelos de modelo del filtro Core(4)
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Core (iii) Crear dinámicamente instancias usando ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Núcleo (2) Reiniciar la aplicación por código
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) utiliza caché Redis
https://www.itsvse.com/thread-9393-1-1.html
Publicado el 4-4-2022 15:02:24 |
Aprende a aprender
Publicado el 13-4-2022 08:58:42 |
Esto está bien, me gusta. ¡Gracias por compartirlo!
Publicado el 14-4-2022 09:46:41 |
Aprende cómo funciona el tipo grande, gracias por compartirlo
Publicado el 5-8-2022 16:25:05 |
El jefe ha trabajado duro
 Propietario| Publicado el 25-11-2024 10:33:43 |
SixLabors.ImageSharp también es una gran biblioteca para el procesamiento de imágenes multiplataforma
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com