ios判斷檔案或圖片的型別

weixin_33670713發表於2016-11-27

可以通過二進位制的前2位的ascii碼來進行判斷。如下:

// 255216 jpg;

// 7173 gif;

// 6677 bmp,

// 13780 png;

// 6787 swf

// 7790 exe dll,

// 8297 rar

// 8075 zip

// 55122 7z

// 6063 xml

// 6033 html

// 239187 aspx

// 117115 cs

// 119105 js

// 102100 txt

// 255254 sql

比如在下載東西的時候,從伺服器傳送過來的是二進位制data資料,需要根據二進位制判斷是什麼型別的檔案,從而進行檔案儲存工作.在ios中用OC程式碼實現如下

- (void)viewDidLoad {

[super viewDidLoad];

NSString *path = [[NSBundle mainBundle] pathForResource:@"mm"ofType:@"jpg"];

NSData *data = [NSData dataWithContentsOfFile:path];

if (data.length<2) {

return NSLog(@"NOT FILE");

}

int char1 = 0 ,char2 =0 ; //必須這樣初始化

[data getBytes:&char1 range:NSMakeRange(0, 1)];

[data getBytes:&char2 range:NSMakeRange(1, 1)];

NSLog(@"%d%d",char1,char2);

NSString *numStr = [NSString stringWithFormat:@"%i%i",char1,char2];

NSLog(@"%@",numStr);

}

輸出的是:255216,正好對應的是jpg.其他的也一樣.

如果只判斷圖片的格式,可以取圖片的第一個位元組,對應的如下

0xFF : jpg

0x89:png

0x47:gif

0x4D:tiff

程式碼:

- (void)viewDidLoad {

[super viewDidLoad];

NSString *path = [[NSBundle mainBundle] pathForResource:@"mm"ofType:@"jpg"];

NSData *data = [NSData dataWithContentsOfFile:path];

uint8_t c;

//    [data getBytes:&c length:1];

[data getBytes:&c range:NSMakeRange(0, 1)];

switch (c) {

case 0xFF:

return NSLog(@"jpg");

break;

case 0x89:

return NSLog(@"png");

break;

case 0x47:

return NSLog(@"gif");

break;

case 0x4D:

return NSLog(@"tiff");

break;

default:

break;

}

}

相關文章