IOS 對相冊圖片進行讀取、存儲到指定文件夾

這個示例程序主要用到了IOS中的UIImageView、UIImagePickerViewController、UIImage、NSFileManager等知識,結合這些知識構成一個小的應用程序,主要功能是對相冊圖片進行讀取、存儲到指定文件夾、從指定文件夾讀取出來。這方面的知識在正式項目中用的是比較多的。作Android開發中,常常會使用到將圖片保存到SD卡和從SD卡讀取圖片的操做,相比於Android在這方面的操做,IOS要方便許多。app

 

基本功能是從相冊選取一張圖片,選完後顯示在界面的UIImageView控件中,點擊保存到文件夾按鈕後就將圖片保存到Documents下的ImageFile文件夾中,以image.png命名。退出程序下次進來時,能夠選擇從文件夾讀取圖片,若是有則讀取出來顯示在UIImageView上,若是沒有則提示文件不存在。ide

首先來看看最後效果:佈局

·從相冊選取圖片後顯示在界面上atom

這裏對功能進行了一點改進,點擊打開相冊按鈕後出來一個UIActionSheet操做選項框,能夠選擇是從相機獲取圖片仍是從相冊獲取。代碼也作出了一點修改。spa

                          

·點擊保存到文件夾按鈕後提示信息.net

                           

 

·點擊讀取圖片按鈕後的提示信息(圖片不存在)代理

·若是存在則將圖片顯示出來對象

            

保存圖片成功後,按照前一篇文章提到的方法,能夠到Finder下查看文件信息:blog

 

下面是實現部分,首先看看佈局文件:事件

 

下面是代碼:

 

[cpp]  view plain copy
 
 
  1. #import <UIKit/UIKit.h>  
  2.   
  3. @interface ViewController : UIViewController<UIImagePickerControllerDelegate,UINavigationControllerDelegate,UIActionSheetDelegate>  
  4.   
  5. @property (retain, nonatomic) IBOutlet UIImageView *imageView;  
  6. @property (retain, nonatomic) UIButton *saveToFileButton;  
  7.   
  8. //打開相冊  
  9. - (IBAction)openAlbum:(id)sender;  
  10.   
  11. //從文件夾讀取圖片  
  12. - (IBAction)readImage:(id)sender;  
  13.   
  14. @end  



 

下面是ViewController.m文件

 

[cpp]  view plain copy
 
 
    1. #import "ViewController.h"  
    2. //保存到文件夾按鈕的標籤,選取圖片前,這個按鈕是隱藏的  
    3. #define SAVE_BUTTON_TAG 101  
    4.   
    5. @interface ViewController ()  
    6.   
    7. @end  
    8.   
    9. @implementation ViewController  
    10. @synthesize imageView = _imageView;  
    11. @synthesize saveToFileButton = _saveToFileButton;  
    12.   
    13. - (void)viewDidLoad  
    14. {  
    15.     [super viewDidLoad];  
    16.     //根據設置的tag獲取按鈕控件  
    17.     self.saveToFileButton = (UIButton *)[self.view viewWithTag:SAVE_BUTTON_TAG];  
    18.     //添加對象事件  
    19.     [self.saveToFileButton addTarget:self action:@selector(saveToFileBtnTapped:) forControlEvents:UIControlEventTouchUpInside];  
    20.     //設置爲不可見  
    21.     self.saveToFileButton.hidden = YES;  
    22. }  
    23.   
    24. - (void)viewDidUnload  
    25. {  
    26.     [self setImageView:nil];  
    27.     [self setSaveToFileButton:nil];  
    28.     [super viewDidUnload];  
    29.     // Release any retained subviews of the main view.  
    30. }  
    31.   
    32. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation  
    33. {  
    34.     return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);  
    35. }  
    36.   
    37. - (void)dealloc {  
    38.     [self.imageView release];  
    39.     [self.saveToFileButton release];  
    40.     [super dealloc];  
    41. }  
    42.   
    43. - (IBAction)openAlbum:(id)sender {  
    44.     UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"選擇圖片" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"拍照",@"相冊", nil];  
    45.     [actionSheet showInView:self.view];  
    46.     [actionSheet release];  
    47. }  
    48.   
    49. //從文件夾讀取圖片  
    50. - (IBAction)readImage:(id)sender {  
    51.     NSString *imagePath = [self imageSavedPath:@"image.png"];  
    52.     NSFileManager *fileManager = [NSFileManager defaultManager];  
    53.     //判斷文件是否存在  
    54.     if (![fileManager fileExistsAtPath:imagePath]) {  
    55.         UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Note" message:@"文件不存在" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];  
    56.         [alertView show];  
    57.         [alertView release];  
    58.     }else {  
    59.         //從指定目錄讀取圖片  
    60.         UIImage *image = [UIImage imageWithContentsOfFile:imagePath];  
    61.         self.imageView.image = image;  
    62.     }  
    63. }  
    64.   
    65. //保存到文件按鈕事件  
    66. - (void)saveToFileBtnTapped:(id)sender {  
    67.     NSString *imagePath = [self imageSavedPath:@"image.png"];  
    68.     BOOL isSaveSuccess = [self saveToDocument:self.imageView.image withFilePath:imagePath];  
    69.       
    70.     if (isSaveSuccess) {  
    71.         UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"操做結果" message:@"保存圖片成功" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];  
    72.         [alertView show];  
    73.         [alertView release];  
    74.     }else {  
    75.         UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"操做結果" message:@"保存圖片失敗" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];  
    76.         [alertView show];  
    77.         [alertView release];  
    78.     }  
    79. }  
    80.   
    81. //將選取的圖片保存到目錄文件夾下  
    82. -(BOOL)saveToDocument:(UIImage *) image withFilePath:(NSString *) filePath  
    83. {  
    84.     if ((image == nil) || (filePath == nil) || [filePath isEqualToString:@""]) {  
    85.         return NO;  
    86.     }  
    87.       
    88.     @try {  
    89.         NSData *imageData = nil;  
    90.         //獲取文件擴展名  
    91.         NSString *extention = [filePath pathExtension];  
    92.         if ([extention isEqualToString:@"png"]) {  
    93.             //返回PNG格式的圖片數據  
    94.             imageData = UIImagePNGRepresentation(image);  
    95.         }else{  
    96.             //返回JPG格式的圖片數據,第二個參數爲壓縮質量:0:best 1:lost  
    97.             imageData = UIImageJPEGRepresentation(image, 0);  
    98.         }  
    99.         if (imageData == nil || [imageData length] <= 0) {  
    100.             return NO;  
    101.         }  
    102.         //將圖片寫入指定路徑  
    103.         [imageData writeToFile:filePath atomically:YES];  
    104.         return  YES;  
    105.     }  
    106.     @catch (NSException *exception) {  
    107.         NSLog(@"保存圖片失敗");  
    108.     }  
    109.       
    110.     return NO;  
    111.       
    112. }  
    113.   
    114. //根據圖片名將圖片保存到ImageFile文件夾中  
    115. -(NSString *)imageSavedPath:(NSString *) imageName  
    116. {  
    117.     //獲取Documents文件夾目錄  
    118.     NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
    119.     NSString *documentPath = [path objectAtIndex:0];  
    120.     //獲取文件管理器  
    121.     NSFileManager *fileManager = [NSFileManager defaultManager];  
    122.     //指定新建文件夾路徑  
    123.     NSString *imageDocPath = [documentPath stringByAppendingPathComponent:@"ImageFile"];  
    124.     //建立ImageFile文件夾  
    125.     [fileManager createDirectoryAtPath:imageDocPath withIntermediateDirectories:YES attributes:nil error:nil];  
    126.     //返回保存圖片的路徑(圖片保存在ImageFile文件夾下)  
    127.     NSString * imagePath = [imageDocPath stringByAppendingPathComponent:imageName];  
    128.     return imagePath;  
    129. }  
    130.   
    131. #pragma Delegate method UIImagePickerControllerDelegate  
    132. //圖像選取器的委託方法,選完圖片後回調該方法  
    133. -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo  
    134. {  
    135.     if (image != nil) {  
    136.         //選定照片後在界面顯示照片並把保存按鈕設爲可見  
    137.         self.imageView.image = image;  
    138.         self.saveToFileButton.hidden = NO;  
    139.     }  
    140.     //關閉圖像選擇器  
    141.     [self dismissModalViewControllerAnimated:YES];  
    142. }  
    143.   
    144. -(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex  
    145. {  
    146.     //獲取圖片選取器  
    147.     UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];  
    148.     //指定代理  
    149.     imagePicker.delegate = self;  
    150.     //打開圖片後容許編輯  
    151.     imagePicker.allowsEditing = YES;  
    152.       
    153.     //判斷圖片源的類型  
    154.     if (buttonIndex == 0) {  
    155.         if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {  
    156.             //相機  
    157.             imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;  
    158.         }  
    159.     }else if (buttonIndex == 1) {  
    160.         if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]){  
    161.             //圖片庫  
    162.             imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;  
    163.         }  
    164. //        if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]) {  
    165. //            //相冊  
    166. //            imagePicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;  
    167. //        }  
    168.     }else if (buttonIndex == [actionSheet cancelButtonIndex]) {  
    169.         return;  
    170.     }  
    171.       
    172.     //打開圖片選擇模態視圖  
    173.     [self presentModalViewController:imagePicker animated:YES];  
    174.     [imagePicker release];  
    175.   
    176. }  
    177.   
    178. @end  
相關文章
相關標籤/搜索