ホームページ > バックエンド開発 > C++ > C# で画像ファイル形式を確実に検証する方法

C# で画像ファイル形式を確実に検証する方法

Barbara Streisand
リリース: 2024-12-29 17:57:14
オリジナル
695 人が閲覧しました

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート