回答
你可以看看第一字節,並作出猜測。互聯網上有許多神奇數字的列表,例如, 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. 以文件格式識別可可(NSData,NSArray等)對象
- 5. 圖像識別
- 6. 圖像識別
- 7. 「識別」命令未識別的圖像
- 8. 如何識別圖像中的金色?
- 9. 圖像模式識別的Java框架?
- 10. 圖像識別庫
- 11. 圖像識別 - pyautogui
- 12. DrawMatching - 圖像識別
- 13. VB.Net圖像識別
- 14. 圖像識別(形狀識別)
- 15. 無法識別的圖像文件格式爲.PNG圖像gwt編譯失敗
- 16. 如何使用C#識別CMYK圖像
- 17. 爲LBP人臉識別器格式化圖像
- 18. Hololens的圖像識別
- 19. android上的圖像識別
- 20. 如何轉換圖像的NSData這NSData的要的NSString
- 21. 如何比較圖像以識別圖像中的人物?
- 22. 從指定格式(JPEG)的給定NSData加載圖像
- 23. 發票格式識別器
- 24. 識別日期格式
- 25. 如何識別圖像是黑白還是彩色圖像?
- 26. Watir:識別圖像按鈕
- 27. 圖像識別軟件庫?
- 28. 圖像/場景識別
- 29. 在Python中識別圖像
- 30. MySQL不識別圖像
如何問NSImage它的格式? 我正在iOS上工作,我不確定這個解決方案是否適用於iOS – Jimmy