- Home /
How to detect file type loaded from device local storage
Basically I am loading profile picture from Gallery section of android/iPhone devices. So game player may select any image format. So at server upload time, I need to specify which format image, player has selected. Basically from local storage loading, I am using this way:
selectedImagePath.Replace(" ","%20");
WWW localFile = new WWW ("file://" + selectedImagePath);
yield return localFile;
if (localFile.error == null)
Debug.Log ("Loaded file successfully");
else
Debug.Log ("Open file error: " + localFile.error);
So which way I need to detect file type as png/jpg/gif? Please give me some help in this.
Answer by Arkaid · Jul 01, 2016 at 01:56 PM
Assuming you don't trust or don't have access to the file extension, you can look at the image's magic number.
private bool CheckMagicNumber(byte [] bytes, byte [] magic)
{
bool match = true;
for (int i = 0; i < magic.Length && match; i++)
match = match && magic[i] == bytes[i];
return match;
}
and then...
selectedImagePath.Replace(" ", "%20");
WWW localFile = new WWW("file://" + selectedImagePath);
yield return localFile;
byte[] PNG = { 0x89, 0x50, 0x4E, 0x47 };
byte[] JPG = { 0xFF, 0xD8 };
byte[] GIF = { 0x47, 0x49, 0x46, 0x38 };
if (localFile.error == null)
{
Debug.Log("Loaded file successfully");
if (CheckMagicNumber(localFile.bytes, PNG))
Debug.Log("It's a PNG!");
else if (CheckMagicNumber(localFile.bytes, JPG))
Debug.Log("It's a JPG!");
else if (CheckMagicNumber(localFile.bytes, GIF))
Debug.Log("It's a GIF!");
}
else
Debug.Log("Open file error: " + localFile.error);
Your answer
Follow this Question
Related Questions
How to save textures to iOS devices, ask for help. 1 Answer
WWW Image Loading Fails When Directory Contains "+" Character 0 Answers
How to load a textAsset not from resources and add it as Script Component? 0 Answers
loading different image links into a list 0 Answers
www class works fine in android but doesn't work in ios... 0 Answers