이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 38588|회답: 6

[.NET 코어] ASP.NET 코어(14)는 SkiaSharp 이미지 캡차를 기반으로 합니다

[링크 복사]
2022-4-4 12:25:53에 게시됨 | | | |
이전에는 .NET 프레임워크를 사용해 ASP.NET 프로젝트를 개발할 때 모두 윈도우 시스템에 배포되었고, 크로스 플랫폼이 불가능했기 때문에, System.Drawing을 사용해 다음과 같이 이미지 검증 코드를 생성할 수 있습니다:

asp.net MVC 아름다운 이미지 캡차
https://www.itsvse.com/thread-4911-1-1.html

WebAPI는 그래픽 검증 코드 기능을 구현합니다
https://www.itsvse.com/thread-7304-1-1.html

.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()

오류 참고:

리눅스 사진에서 .NET 코어 워터마킹 문제
https://www.itsvse.com/thread-9605-1-1.html

크로스 플랫폼 이미지 처리를 위해 마이크로소프트 공식 문서에서는 다음 라이브러리 사용을 권장합니다:

  • 이미지샤프
  • 스키아샤프
  • 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 컨트롤러 코드는 다음과 같습니다:

최종 렌더링은 다음과 같습니다:


마지막으로, 폰트 파일을 첨부하세요:

관광객 여러분, 이 게시물의 숨겨진 내용을 보고 싶으시다면 부탁드립니다회답


(끝)




이전의:[돌기]. NET 6 신규 기능 Enumerable.Chunk()
다음:Angular는 부모 클릭 이벤트의 트리거를 방지합니다
 집주인| 2022-4-4 12:28:35에 게시됨 |
복습

ASP.NET Core(XIII)를 통해 Ajax 요청인지 여부를 판단할 수 있습니다
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET 코어(12개) 프론트엔드 JS, CSS 번들링, 압축
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET 코어(XI) 엔드포인트 경로는 모든 DI 서비스를 표시하는 미들웨어를 추가합니다
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Core(10)에서의 구성 우선순위에 대한 상세 설명.
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Core (9)의 미들웨어 미들웨어에 대한 상세한 설명.
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET 코어 미들웨어에 대한 상세한 설명
https://www.itsvse.com/thread-8126-1-1.html

Core(8) Swagger UI 기본 매개변수의 ASP.NET 구멍입니다.
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET 핵심 (7) 프레임워크 소스 코드에 대한 심층 분석
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET 코어(VI) DI는 객체 주입 방식을 수동으로 획득합니다
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET 코어(다섯 개)는 CAP 분산 트랜잭션을 기반으로 합니다
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET 코어(4) 필터 통합 모델스테이트 모델 검증
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET 코어 (iii) ActivatorUtilities를 사용하여 동적으로 인스턴스를 생성합니다
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET 코어 (2) 코드로 애플리케이션을 재시작함
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET 코어(1)는 Redis 캐싱을 사용합니다
https://www.itsvse.com/thread-9393-1-1.html
2022-4-4 15:02:24에 게시됨 |
배우기 위해 배우세요
2022-4-13 08:58:42에 게시됨 |
이거 좋네요, 마음에 들어요. 공유해 주셔서 감사합니다!
2022-4-14 09:46:41에 게시됨 |
큰 녀석의 작전을 배우세요, 공유해 주셔서 감사합니다
2022-8-5 16:25:05에 게시됨 |
사장님이 수고하셨어요
 집주인| 2024-11-25 10:33:43에 게시됨 |
SixLabors.ImageSharp는 크로스 플랫폼 이미지 처리에도 훌륭한 라이브러리입니다
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com