apo*_*che 16
我使用Mats回答在NSData上构建一个简单的类别,告诉我它的内容是基于前4个字节的JPEG或PNG:
@interface NSData (yourCategory)
- (BOOL)isJPG;
- (BOOL)isPNG;
@end
@implementation NSData (yourCategory)
- (BOOL)isJPG
{
if (self.length > 4)
{
unsigned char buffer[4];
[self getBytes:&buffer length:4];
return buffer[0]==0xff &&
buffer[1]==0xd8 &&
buffer[2]==0xff &&
buffer[3]==0xe0;
}
return NO;
}
- (BOOL)isPNG
{
if (self.length > 4)
{
unsigned char buffer[4];
[self getBytes:&buffer length:4];
return buffer[0]==0x89 &&
buffer[1]==0x50 &&
buffer[2]==0x4e &&
buffer[3]==0x47;
}
return NO;
}
@end
Run Code Online (Sandbox Code Playgroud)
然后,只需做一个:
CGDataProviderRef imgDataProvider = CGDataProviderCreateWithCFData((CFDataRef) imgData);
CGImageRef imgRef = nil;
if ([imgData isJPG])
imgRef = CGImageCreateWithJPEGDataProvider(imgDataProvider, NULL, true, kCGRenderingIntentDefault);
else if ([imgData isPNG])
imgRef = CGImageCreateWithPNGDataProvider(imgDataProvider, NULL, true, kCGRenderingIntentDefault);
UIImage* image = [UIImage imageWithCGImage:imgRef];
CGImageRelease(imgRef);
CGDataProviderRelease(imgDataProvider);
Run Code Online (Sandbox Code Playgroud)
您可以查看第一个字节并进行猜测.互联网上有许多魔术数字列表,例如http://www.astro.keele.ac.uk/oldusers/rno/Computing/File_magic.html.