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 중국어 웹사이트의 기타 관련 기사를 참조하세요!