Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mengesahkan Format Fail Imej dengan Amanah dalam C#?

Bagaimana untuk Mengesahkan Format Fail Imej dengan Amanah dalam C#?

Barbara Streisand
Lepaskan: 2024-12-29 17:57:14
asal
737 orang telah melayarinya

How to Reliably Validate Image File Formats in C#?

Cara Mengesahkan Format Fail Imej dalam C#

Apabila memuatkan imej daripada fail, pengesahan adalah penting untuk mengelakkan ralat seperti OutOfMemoryExceptions. Walau bagaimanapun, bergantung semata-mata pada sambungan fail boleh menjadi tidak boleh dipercayai.

Prototaip Fungsi Pengesahan

bool IsValidImage(string fileName);
bool IsValidImage(Stream imageStream);
Salin selepas log masuk

Penyelesaian: Pengesahan Imej Berdasarkan Tandatangan Byte

Pendekatan yang boleh dipercayai ialah menyemak tandatangan bait fail, yang menyediakan maklumat tentang formatnya. Berikut ialah pelaksanaan 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;
}
Salin selepas log masuk

Contoh Penggunaan

// 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
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Mengesahkan Format Fail Imej dengan Amanah dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan