2010-01-10 45 views
71

我有麻煩搞清楚NSBundle & DocumentDirectory數據,我有一個攝像頭圖片「的ImageView」那我保存到NSDocumentDirectoy,然後想找回它用於連接到電子郵件,保存圖像文件的目錄和檢索的電子郵件附件

在這裏,既可以節省代碼:

- (IBAction)saveImage { 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *savedImagePath = [documentsDirectory stringByAppendingPathComponent:@"savedImage.png"]; 
    UIImage *image = imageView.image; // imageView is my image from camera 
    NSData *imageData = UIImagePNGRepresentation(image); 
    [imageData writeToFile:savedImagePath atomically:NO]; 
} 

這是新獲取數據代碼:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"savedImage.png"]; 
    NSData *myData = [[[NSData alloc] initWithContentsOfFile:appFile] autorelease]; 
    [picker addAttachmentData:myData mimeType:@"image/png" fileName:@"savedImage"]; 
+1

你能告訴我你是如何得到相機圖像的嗎?即您使用相機拍攝的UIImage的參考。謝謝。 – Remover 2010-09-12 18:10:02

+0

在Swift中保存並獲取圖像:https://iosdevcenters.blogspot.com/2016/04/save-and-get-image-from-document.html – 2016-09-07 06:42:14

+0

在哪裏調用saveImage操作。我是新的Xcode。 – NovusMobile 2017-01-07 07:02:20

回答

66
- (IBAction)getImage { 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,  NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *getImagePath = [documentsDirectory stringByAppendingPathComponent:@"savedImage.png"]; 
    UIImage *img = [UIImage imageWithContentsOfFile:getImagePath]; 
} 

這應該讓你開始!

+0

謝謝,它是不同於本的答案,但電子郵件附件需要添加NSData,我必須在你的答案中丟失一些東西。我將如何附加「img:命名爲電子郵件?謝謝 – 2010-01-10 16:41:51

+0

[picker addAttachmentData:myData mimeType:@」image/png 「fileName:@」icon「]; 上面的」data「是圖片的nsdata表示,」picker「是電子郵件組件,它已經被連接 – Jordan 2010-01-10 17:44:45

+0

現在工作謝謝... – 2010-01-10 18:09:57

0

由於每個iPhone應用程序都位於自己的沙箱中,因此您無權訪問設備範圍的文檔文件夾。要將圖像附加到電子郵件中,請將圖像保存在您自己的文檔文件夾中。嘗試使用[@「〜/ Documents」StringByExpandingTildeInPath]以獲取您的本地文檔文件夾 - 適用於我。它看起來像用於將圖像附加到電子郵件中的技術是正確的。

希望幫助,

+0

我收到預期的錯誤「:」之前「;」在這一行上: \t NSString * path = [[@「〜Documents」] pathForResource:@「image」ofType:@「png」]; \t 任何想法?感謝你的幫助。 – 2010-01-10 16:36:05

+0

記得添加「stringByExpandingTildeInPath」部分。 (它需要是「〜/ Documents」,而不是「〜Documents」)。stringByExpandingTildeInPath是NSString的一種方法,它將自動替換〜到用戶主文件夾的路徑 – 2010-01-10 18:13:35

+1

現在工作謝謝... – 2010-01-10 18:16:13

0

試試這個:

-(void)setProfilePic 
{ 
    NSArray *docpaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [docpaths objectAtIndex:0]; 
    NSString *imagePath = [documentsDirectory stringByAppendingPathComponent:@"Image.png"]; 

    NSData *imgData = [[NSData alloc] initWithContentsOfURL:[NSURL fileURLWithPath:imagePath]]; 
    UIImage *thumbNail = [[UIImage alloc] initWithData:imgData]; 
    [profilePic_btn setBackgroundImage:thumbNail forState:UIControlStateNormal]; 
} 
5

斯威夫特3

// Create a URL 
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first 
let imageURL = documentsURL?.appendingPathComponent("MyImageName.png") 

// save image to URL 
let myImage = imageView.image! // or wherever you have your UIImage 

do { 
    try UIImagePNGRepresentation(myImage)?.write(to: imageURL!) 
} catch {} 


// Use the URL to retrieve the image for sharing to email, social media, etc. 
// docController.URL = imageURL 
// ... 

我強迫解開一些自選的簡潔。在代碼中使用guardif let

+0

實際上有兩種可用的情況 - '.documentationDirectory'和'.documentDirectory',這是不一樣的東西。問題是關於文檔目錄,所以我想你只是從代碼完成建議中選擇了一個錯誤的值;) – alexburtnik 2017-06-18 22:20:18

+0

@alexburtnik,啊,是的,可能。感謝您的解釋(並修復我的錯誤)。 – Suragch 2017-06-18 22:52:57

相關問題