2014-04-13 75 views
0

我知道這種方式來保存圖像文件的目錄。保存的UIImage在Documents目錄

// Save image. 
[UIImagePNGRepresentation(image) writeToFile:filePath atomically:YES]; 

但要保存文檔目錄UIImage的情況下直接將其轉換爲NSData。有什麼辦法嗎?

+0

爲什麼?將其轉換爲「NSData」有什麼問題?這當然使它成爲一個更小的文件。保存'UIImage'的原始字節將是巨大的。 – rmaddy

+0

@rmaddy敏銳,我必須救40+的圖像,但需要很長時間。因爲它將UIImage轉換爲NSData,然後將它寫入目錄。 所以只是做快速處理圖像保存,我正在尋找一些替代。 – vijay

+1

延遲是將未壓縮的原始'UIImage'數據轉換爲PNG格式所需的時間。即使你想要寫的原始,未壓縮的'UIImage'數據,你仍然需要寫入數據。做一些關於訪問'UIImage'數據的搜索。一旦你知道如何訪問這些數據,將所有這些字節寫入文件並不難。但是這些文件將非常龐大,您最終可能會花更多時間來編寫更多數據。 – rmaddy

回答

1

要一個UIImage保存爲圖像格式的文件,使用ImageIO framework

在這個例子中,我保存的圖像進入應用程序支持目錄爲TIFF(這是最快的,因爲沒有壓縮參與):

CGImageSourceRef src = // ... whatever, depends on how you got the image originally 
NSFileManager* fm = [NSFileManager new]; 
NSURL* suppurl = [fm URLForDirectory:NSApplicationSupportDirectory 
          inDomain:NSUserDomainMask 
        appropriateForURL:nil 
           create:YES error:nil]; 
NSURL* tiff = [suppurl URLByAppendingPathComponent:@"mytiff.tiff"]; 
CGImageDestinationRef dest = 
    CGImageDestinationCreateWithURL((__bridge CFURLRef)tiff, 
            (CFStringRef)@"public.tiff", 1, nil); 
CGImageDestinationAddImageFromSource(dest, src, 0, nil); 
bool ok = CGImageDestinationFinalize(dest); 
// error-checking omitted 
CFRelease(src); CFRelease(dest); 
+0

你能用Swift 3編輯這個答案嗎? –

+0

@NiravD請參閱https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch23p829imageIO/ch36​​p1084imageIO/ViewController.swift – matt

相關問題