C# How can I test a file is a jpeg?

后端 未结 16 2207
失恋的感觉
失恋的感觉 2020-11-27 03:28

Using C# how can I test a file is a jpeg? Should I check for a .jpg extension?

Thanks

相关标签:
16条回答
  • 2020-11-27 03:35

    Once you have the extension you could use a regular expression to validate it.

    ^.*\.(jpg|JPG)$
    
    0 讨论(0)
  • 2020-11-27 03:35

    after check extention of file read first four byte of image and two last byte of image like this, do it for two last byte for value 255 , 217 for other file can do it Validate image from file in C# http://www.garykessler.net/library/file_sigs.html

    // after check extention of file
    byte[] ValidFileSignture = new byte[] { 255, 216, 255, 224 };
    byte[] bufferforCheck = new byte[ValidFileSignture.Length];
    Stream _inputStream = file.InputStream;
    byte[] bufferforCheck1 = new byte[] { 255, 216, 255, 224 };
    _inputStream.Read(bufferforCheck, 0, ValidFileSignture.Length);
    if (!Enumerable.SequenceEqual(bufferforCheck, ValidFileSignture))
    {
        //file OK
    }
    
    0 讨论(0)
  • 2020-11-27 03:36

    Open the file as a stream and look for the magic number for JPEG.

    JPEG image files begin with FF D8 and end with FF D9. JPEG/JFIF files contain the ASCII code for 'JFIF' (4A 46 49 46) as a null terminated string. JPEG/Exif files contain the ASCII code for 'Exif' (45 78 69 66) also as a null terminated string

    0 讨论(0)
  • 2020-11-27 03:37

    This will loop through each file in the current directory and will output if any found files with JPG or JPEG extension are Jpeg images.

          foreach (FileInfo f in new DirectoryInfo(".").GetFiles())
            {
                if (f.Extension.ToUpperInvariant() == ".JPG"
                    || f.Extension.ToUpperInvariant() == ".JPEG")
                {
                    Image image = Image.FromFile(f.FullName);
    
                    if (image.RawFormat == ImageFormat.Jpeg)
                    {
                        Console.WriteLine(f.FullName + " is a Jpeg image");
                    }
                }
            }
    
    0 讨论(0)
  • 2020-11-27 03:37
    System.Web.MimeMapping.GetMimeMapping(filename).StartsWith("image/");
    MimeMapping.GetMimeMapping produces these results:
    
    file.jpg: image/jpeg
    file.gif: image/gif
    file.jpeg: image/jpeg
    file.png: image/png
    file.bmp: image/bmp
    file.tiff: image/tiff
    file.svg: application/octet-stream
    
    0 讨论(0)
  • OMG, So many of these code examples are wrong, wrong wrong.

    EXIF files have a marker of 0xff*e1*, JFIF files have a marker of 0xff*e0*. So all code that relies on 0xffe0 to detect a JPEG file will miss all EXIF files.

    Here's a version that will detect both, and can easily be altered to return only for JFIF or only for EXIF. (Useful when trying to recover your iPhone pictures, for example).

        public static bool HasJpegHeader(string filename)
        {
            try
            {
                // 0000000: ffd8 ffe0 0010 4a46 4946 0001 0101 0048  ......JFIF.....H
                // 0000000: ffd8 ffe1 14f8 4578 6966 0000 4d4d 002a  ......Exif..MM.*    
                using (BinaryReader br = new BinaryReader(File.Open(filename, FileMode.Open, FileAccess.ReadWrite)))
                {
                    UInt16 soi = br.ReadUInt16();  // Start of Image (SOI) marker (FFD8)
                    UInt16 marker = br.ReadUInt16(); // JFIF marker (FFE0) EXIF marker (FFE1)
                    UInt16 markerSize = br.ReadUInt16(); // size of marker data (incl. marker)
                    UInt32 four = br.ReadUInt32(); // JFIF 0x4649464a or Exif  0x66697845
    
                    Boolean isJpeg = soi == 0xd8ff && (marker & 0xe0ff) == 0xe0ff;
                    Boolean isExif = isJpeg && four == 0x66697845;
                    Boolean isJfif = isJpeg && four == 0x4649464a;
    
                    if (isJpeg) 
                    {
                        if (isExif)
                            Console.WriteLine("EXIF: {0}", filename);
                        else if (isJfif)
                            Console.WriteLine("JFIF: {0}", filename);
                        else
                            Console.WriteLine("JPEG: {0}", filename);
                    }
    
                    return isJpeg;
                    return isJfif;
                    return isExif;
                }
            }
            catch
            {
                return false;
            }
        }
    
    0 讨论(0)
提交回复
热议问题