2010-01-10 42 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

相关问题