如何在Array ios中添加图像?

How to add images in Array ios?

提问人:SWAMY CHUNCHU 提问时间:10/24/2016 更新时间:10/24/2016 访问量:2868

问:

下图:编辑图像后,当我单击共享/保存按钮时,如何在数组中添加图像。我应该显示在 TableView 中,并且它已保存在本地。

enter image description here

IOS 目标-C iOS7 IOS5 IOS7.1

评论

0赞 Ekta Padaliya 10/24/2016
您必须将图像数据存储在数组中,而不是图像中。
0赞 SWAMY CHUNCHU 10/24/2016
您能否解释一下如何在我想在 TableView 中显示的数组中保存和检索
1赞 Marie Dm 10/24/2016
您可以有一个图像数组“var images_array=[UIImage]()”或数据数组“var data_array=[NSData]()”,并检索图像,如下所示“let image=UIImage(data: data_array[i])”。
0赞 vaibhav 10/24/2016
您想将这些数组图像显示给另一个 VC 或在同一 VC 内部吗?
0赞 SWAMY CHUNCHU 10/24/2016
我想显示另一个视图控制器

答:

2赞 Ekta Padaliya 10/24/2016 #1

您可以像这样将 UIImage 转换为 NSData:

如果PNG图像

UIImage *image = [UIImage imageNamed:@"imageName.png"];
NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(image)];

如果JPG图像

UIImage *image = [UIImage imageNamed:@"imageName.jpg"];
NSData *imageData = UIImageJPEGRepresentation(image, 1.0);

将 imageData 添加到数组:

[self.arr addObject:imageData];

从 NSData 加载图像:

UIImage *img = [UIImage imageWithData:[self.arr objectAtIndex:0]];
1赞 Andrea 10/24/2016 #2

不要将图像存储到数组或字典中,除非您要创建缓存,但缓存将来应该会逐出其内容。
您正在使用的移动设备,即使功能强大,它也没有与Mac相同的硬件。 内存是一种有限的资源,应该通过判断进行管理。

如果出于性能原因想临时缓存这些图像,则可以使用 NSCache,基本上就像可变字典一样工作,但它是线程安全的。
如果你想把它们保存在本地,这很好,但只要在数组中保留它们的路径。

- (NSString*) getDocumentsPath {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsPath = paths[0]; //Get the document directory
    return documentsPath;
}

- (NSString*) writePNGImage: (UIImage*) image withName: (NSString*) imageName {
    NSString *filePath = [[self getDocumentsPath] stringByAppendingPathComponent:imageName]; // Add file name
    NSData *pngData = UIImagePNGRepresentation(image);
    BOOL saved = [pngData writeToFile:filePath atomically:YES]; //Write the file
    if (saved) {
        return filePath;
    }
    return nil;
}

- (UIImage*) readImageAtPath:(NSString*) path {
    NSData *pngData = [NSData dataWithContentsOfFile:path];
    UIImage *image = [UIImage imageWithData:pngData];
    return image;
}