回答
你可以看看第一字节,并作出猜测。互联网上有许多神奇数字的列表,例如, http://www.astro.keele.ac.uk/oldusers/rno/Computing/File_magic.html。
您可以从创建一个图像,然后就问,这是什么NSImage中的格式?
您可以使用-initWithData创建NSImage中,更多的,请参阅http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSImage_Class/Reference/Reference.html
我用来垫答案的基础上NSData的简单分类,它告诉我,如果它的内容是JPEG或PNG基于其前4个字节:
@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
,然后简单地做一个:
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);
想补充一点,并非所有JPEG的第四个字节都是e0。结果发现有不同公司制造了多种“子类型”。至少请参阅http://www.garykessler.net/library/file_sigs.html部分列表。根据我迄今为止所看到的,似乎他们始终具有前面提到的前三个字节,并且没有其他文件类型似乎使用这些相同的三个字节,但我不知道这是否写在任何地方。 –
这里的@ apouche的回答迅捷的版本:
extension NSData {
func firstBytes(length: Int) -> [UInt8] {
var bytes: [UInt8] = [UInt8](count: length, repeatedValue: 0)
self.getBytes(&bytes, length: length)
return bytes
}
var isJPEG: Bool {
let signature:[UInt8] = [0xff, 0xd8, 0xff, 0xe0]
return firstBytes(4) == signature
}
var isPNG: Bool {
let signature:[UInt8] = [0x89, 0x50, 0x4e, 0x47]
return firstBytes(4) == signature
}
}
您可以创建CGImageSourceRef,然后问它为图像类型
CGImageSourceRef imageSource = CGImageSourceCreateWithData((__bridge CFDataRef) imageData, NULL);
if(imageSource)
{
// this is the type of image (e.g., public.jpeg - kUTTypeJPEG)
// <MobileCoreServices/UTCoreTypes.h>
CFStringRef UTI = CGImageSourceGetType(imageSource);
CFRelease(imageSource);
}
imageSource = nil;
- 1. TensorFlow图像识别输出格式C++
- 2. 通过数据识别图像格式
- 3. 图像识别模式识别
- 4. 如何识别图像
- 5. 图像模式识别
- 6. 识别此图片格式
- 7. 如何训练libsvm格式的图像(像素)数据以用于Java识别
- 8. 以文件格式识别可可(NSData,NSArray等)对象
- 9. 图像识别
- 10. 识别图像
- 11. 图像识别
- 12. 如何识别BarCode的格式?
- 13. 如何识别视频流的格式?
- 14. 任何人都可以识别这种图像格式?
- 15. “识别”命令未识别的图像
- 16. 如何识别PHP中的CMYK图像
- 17. 如何识别图像中的金色?
- 18. 图像模式识别的Java框架?
- 19. 无法识别的图像文件格式 - UiBinder的
- 20. 识别rtf格式
- 21. 主题的图像格式不被识别
- 22. 如何识别音频流格式?
- 23. 识别子图像
- 24. DrawMatching - 图像识别
- 25. VB.Net图像识别
- 26. 图像识别 - pyautogui
- 27. Android图像识别
- 28. 图像识别库
- 29. 图像识别(形状识别)
- 30. 无法识别的图像文件格式为.PNG图像gwt编译失败
如何问NSImage它的格式? 我正在iOS上工作,我不确定这个解决方案是否适用于iOS – Jimmy