2013-06-03 27 views
2

我想檢查目錄中的圖像是否爲png類型,但擴展名爲.bmp。下面確定它是否是一個.bmp擴展儘管.BMP擴展名確定圖像是否爲PNG

string x = Path.GetExtension(file); 

由此我們建立它的擴展名是.bmp。現在問題出現在檢查它是否是png格式。我被困在這一部分。

我之所以這樣做是因爲我想讓我的圖像透明,.bmp圖像不能很好地工作。 謝謝!

+2

查看接受的答案和第一評論:http://stackoverflow.com/questions/670546/determine-if-file-is-an-image –

+0

@GeorgeJohnston即使文件的擴展名爲.bmp,最後的8位也會是那個在其他文章中的答案?有趣的 – haysam

+0

@haysam前8個字節,而不是最後8個位,但是 - 擴展名只是文件名的一部分,它只是約定位圖是'.bmp'而PNG是'.png' – Blorgbeard

回答

-1

閱讀前4個字節的文件:

byte[] b = new byte[4]; 
using (var fs = new FileStream(filename)) 
{ 
    fs.Read(b, 0, 4); 
} 
if (b.ToString().Contains("PNG")) 
{ 
    // this is a png file 
} 
+0

是的,你不能總是信任文件擴展名。您應該*總是*檢查文件簽名(前幾個魔術字節)以確保該文件實際上是它聲稱的類型。 –

+0

-1這是不正確的 - 由@Andrew dh作答 – lstanczyk

8

以上回答不正確,則代碼應該是:

var header = new byte[4]; 
using (var fs = new FileStream(filename)) 
{ 
    fs.Read(header, 0, 4); 
} 

var strHeader = Encoding.ASCII.GetString(header); 
return strHeader.ToLower().EndsWith("png"); 
0

我們可以用這個

Byte[] imageBase64 = .... 

var encodedFile = Encoding.ASCII.GetString(imageBase64); 
return encodedFile.ToLower().StartsWith("?png", StringComparison.InvariantCultureIgnoreCase); 
檢查文件的擴展名
相關問題