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
698 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!

sumber:php.cn
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