> 백엔드 개발 > C++ > C#에서 이미지 파일 형식의 유효성을 안정적으로 확인하는 방법은 무엇입니까?

C#에서 이미지 파일 형식의 유효성을 안정적으로 확인하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-29 17:57:14
원래의
698명이 탐색했습니다.

How to Reliably Validate Image File Formats in C#?

C#에서 이미지 파일 형식의 유효성을 검사하는 방법

파일에서 이미지를 로드할 때 OutOfMemoryExceptions와 같은 오류를 방지하려면 유효성 검사가 중요합니다. 그러나 파일 확장자에만 의존하는 것은 신뢰할 수 없습니다.

검증 함수 프로토타입

bool IsValidImage(string fileName);
bool IsValidImage(Stream imageStream);
로그인 후 복사

솔루션: 바이트 서명 기반 이미지 검증

신뢰할 수 있는 접근 방식은 파일의 바이트를 확인하는 것입니다. 형식에 대한 정보를 제공하는 서명입니다. C# 구현은 다음과 같습니다.

public enum ImageFormat
{
    bmp,
    jpeg,
    gif,
    tiff,
    png,
    unknown
}

public static ImageFormat GetImageFormat(byte[] bytes)
{
    // Byte signatures for various image formats
    var bmp    = Encoding.ASCII.GetBytes("BM");     // BMP
    var gif    = Encoding.ASCII.GetBytes("GIF");    // GIF
    var png    = new byte[] { 137, 80, 78, 71 };    // PNG
    var tiff   = new byte[] { 73, 73, 42 };         // TIFF
    var tiff2  = new byte[] { 77, 77, 42 };         // TIFF
    var jpeg   = new byte[] { 255, 216, 255, 224 }; // jpeg
    var jpeg2  = new byte[] { 255, 216, 255, 225 }; // jpeg canon

    // Compare the byte signatures to the input bytes
    if (bmp.SequenceEqual(bytes.Take(bmp.Length)))
        return ImageFormat.bmp;

    if (gif.SequenceEqual(bytes.Take(gif.Length)))
        return ImageFormat.gif;

    if (png.SequenceEqual(bytes.Take(png.Length)))
        return ImageFormat.png;

    if (tiff.SequenceEqual(bytes.Take(tiff.Length)))
        return ImageFormat.tiff;

    if (tiff2.SequenceEqual(bytes.Take(tiff2.Length)))
        return ImageFormat.tiff;

    if (jpeg.SequenceEqual(bytes.Take(jpeg.Length)))
        return ImageFormat.jpeg;

    if (jpeg2.SequenceEqual(bytes.Take(jpeg2.Length)))
        return ImageFormat.jpeg;

    return ImageFormat.unknown;
}
로그인 후 복사

사용 예

// Example 1: Validate an image using a file path
if (IsValidImage(filePath))
{
    // Load the image safely
}

// Example 2: Validate an image using a stream
Stream imageStream = new FileStream(filePath, FileMode.Open);
if (IsValidImage(imageStream))
{
    // Load the image safely
}
로그인 후 복사

위 내용은 C#에서 이미지 파일 형식의 유효성을 안정적으로 확인하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿