3

Does anyone know the script to validate what the file format is for a given image. Currently i am populating an image object, looking at it's height, width, and resolution. I don't see any specific properties off of this object that explains the file format.

I would like to check for jpg, AI, PSD, High Jes Jpg, Bitmap, and Tiff.

here is my current script:

 protected bool IsValidImage(HttpPostedFileBase file, string fileName) { //verify that the image is no more than 648 wide and 648 pixels tall Image imgPhoto = Image.FromStream(file.InputStream); if (imgPhoto.Width > 648) return false; if (imgPhoto.Height > 648) return false; if (imgPhoto.HorizontalResolution != 72 || imgPhoto.VerticalResolution != 72) return false; return true; } 

Thanks in advance

3
  • Well, if you've got the filename, why not just check the extension? Commented Jan 13, 2010 at 0:58
  • 1
    The Image class won't be able to handle AI or PSD... Commented Jan 13, 2010 at 1:05
  • 1
    @Thomas - I believe if you have the AI or PSD codecs installed then Image will be able to tell you by using the ImageFormat GUID. Commented Jan 13, 2010 at 1:10

4 Answers 4

6

Use Image.RawFormat. The result is an instance of the ImageFormat class which can be compared against the static properties of ImageFormat.

See the ImageFormat class properties for more details.

Sign up to request clarification or add additional context in comments.

4 Comments

How can you tell from the ImageFormat GUID that the image type is PSD or AI?
BTW, thank you for your answer. It was right on. Just need to test the PSD and AI formats.
@Billy - have you considered using Windows Imaging Components (WIC). I'm more positive that you can use codecs to decode a file format in that case, and WIC is server-friendly, whereas GDI is not.
No, i am not extremely familar with GDI or imaging objects in the first place. Don't have to deal with them much. Will check it out though. Thank you for your quick responses.
3
public bool validateImage(byte[] bytes) { try { Stream stream = new MemoryStream(bytes); using(Image img = Image.FromStream(stream)) { if (img.RawFormat.Equals(ImageFormat.Bmp) || img.RawFormat.Equals(ImageFormat.Gif) || img.RawFormat.Equals(ImageFormat.Jpeg) || img.RawFormat.Equals(ImageFormat.Png)) return true; } return false; } catch { return false; } 

}

Comments

1

You can visit Wotsit to find out the magic bytes used as a marker in the beginning of the file. Click on the 'Graphics File' to see the list of file formats..

2 Comments

CodeKaizen's answer is pretty good...+1 from me...did not know about that...Thanks! :)
Link no longer works. Answer is therefore pretty worthless :-/
0

What about:

bool isJpeg = imgPhoto.RawFormat.Equals(Imaging.ImageFormat.Jpeg); 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.