이전에는 .NET 프레임워크를 사용해 ASP.NET 프로젝트를 개발할 때 모두 윈도우 시스템에 배포되었고, 크로스 플랫폼이 불가능했기 때문에, System.Drawing을 사용해 다음과 같이 이미지 검증 코드를 생성할 수 있습니다:
.NET Core 프로젝트를 온라인으로 개발할 때 이미지 캡차를 생성할 때는 System.Drawing.Common 라이브러리를 참조해야 하지만, 현재로서는System.Drawing.Common NuGet 패키지는 이제 다음과 같이 그룹화되었습니다:창문특정 도서관。 비윈도우 운영체제용 컴파일 시 플랫폼 분석기가 컴파일 시 경고를 표시합니다. 아래 그림에서 볼 수 있듯이:
이 통화 사이트는 모든 플랫폼에서 접근 가능합니다. '폰트'는 '윈도우'에서만 지원됩니다.
.NET 6 이전에는 System.Drawing.Common 패키지를 사용할 때 컴파일 시 경고가 발생하지 않았고, 런타임 예외도 발생하지 않았습니다. .NET 6부터는 플랫폼 분석기가 비윈도우 운영체제용 참조 코드를 컴파일 시 컴파일 시 경고를 발송합니다. 또한, 구성 옵션이 설정되어 있지 않으면 다음과 같은 런타임 예외가 발생합니다:
System.TypeInitializationException : 'Gdip'의 타입 초기화자가 예외를 던졌습니다. ---- System.PlatformNotSupportedException : System.Drawing.Common은 비윈도우 플랫폼에서는 지원되지 않습니다. 보다하이퍼링크 로그인이 보입니다.자세한 정보를 원하시면 됩니다. 스택 트레이스: at System.Drawing.SafeNativeMethods.Gdip.GdipCreateBitmapFromFile(String filename, IntPtr& bitmap) /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(42,0): System.Drawing.Bitmap.. ctor(문자열 파일명, 불리언 useIcm) /_/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): at 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.Maui.Graphics
참조:하이퍼링크 로그인이 보입니다.
이 글은 SkiaSharp 라이브러리를 사용하여 그래픽 캡차를 생성합니다.스키아샤프는 구글의 스키아 그래픽 라이브러리(skia.org)를 기반으로 한 .NET 플랫폼용 크로스 플랫폼 2D 그래픽 API입니다.。 모바일, 서버, 데스크톱 모델 전반에 걸쳐 이미지를 렌더링할 수 있는 포괄적인 2D API를 제공합니다.
주소:하이퍼링크 로그인이 보입니다.
먼저, 새로운 ASP.NET Core 6 프로젝트와 참조를 생성하세요스키아샤프관련 도서관은 다음과 같습니다:
프로젝트를 리눅스 시스템에 배포해야 할 경우, 참고문헌이 필요합니다스키아샤프.네이티브자산.리눅스그렇지 않으면 오류는 다음과 같습니다:
4월 3일 18:51:06 raspberrypi dotnet[6203]: fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1] 4월 3일 18:51:06 raspberrypi dotnet[6203]: 요청을 실행하는 중에 처리되지 않은 예외가 발생했습니다. 4월 3일 18:51:06 raspberrypi dotnet[6203]: System.TypeInitializationException: 'SkiaSharp.SKImageInfo'의 타입 초기화자가 예외를 던졌습니다. 4월 3일 18:51:06 raspberrypi dotnet[6203]: ---> System.DllNotFoundException: 공유 라이브러리 'libSkiaSharp' 또는 그 의존성 중 하나를 로드할 수 없습니다. 로딩 문제를 진단하는 데 도움이 되려면, LD_DEBUG 환경 변수를 설정하는 것을 고려해 보세요: liblibSkiaSharp: 공유 객체 파일을 열 수 없습니다: 그러한 파일이나 디렉터리가 없습니다 4월 3일 18:51:06 raspberrypi dotnet[6203]: SkiaSharp.SkiaApi.sk_colortype_get_default_8888() 4월 3일 18:51:06 raspberrypi dotnet[6203]: SkiaSharp.SKImageInfo:에서 cctor() 4월 3일 18:51:06 raspberrypi dotnet[6203]: --- 내부 예외 스택 트레이스 종료 --- 4월 3일 18:51:06 raspberrypi dotnet[6203]: at HomeCloud.ImageCaptcha.GetCaptcha(문자열 captchaText, Int32 너비, Int32 높이, int32 lineNum, int32 lineStrookeWidth) in C: \Users\itsvse_pc\source\repos\ConsoleApp1\HomeCloud\ImageCaptcha.cs:184라인 4월 3일 18:51:06 raspberrypi dotnet[6203]: at HomeCloud.Controllers.HomeController.Test() in C:\Users\itsvse_pc\source\repos\ConsoleApp1\HomeCloud\Controllers\HomeController.cs :80행 4월 3일 18:51:06 raspberrypi dotnet[6203]: lambda_method34(클로저, 객체, 객체[]) 일부 폰트 폰트가 다른 시스템에서 누락되어 검증 코드 정보를 정상적으로 표시하지 못할 수 있음을 고려하기 위해, 아래 그림과 같이 수동으로 폰트를 프로젝트에 복사하고, 새 폰트 폴더를 생성한 뒤, 아래 그림과 같이 폰트를 복사해야 합니다:
구성은 다음과 같습니다:
인터넷의 참고 자료에 따르면, 시험에서 생성된 그래픽 검증 코드는 다음과 같습니다:
생성된 캡차에는 두 가지 단점이 있습니다:캡차는 모두 검은색(OCR로 쉽게 인식됨)이고, 캡차의 글자들은 간격 없이 빽빽하게 모여 있습니다이 두 문제를 해결하기 위해 코드를 다음과 같이 최적화했습니다:
HomeController 컨트롤러 코드는 다음과 같습니다:
최종 렌더링은 다음과 같습니다:
마지막으로, 폰트 파일을 첨부하세요:
관광객 여러분, 이 게시물의 숨겨진 내용을 보고 싶으시다면 부탁드립니다 회답
(끝)
|