zoukankan      html  css  js  c++  java
  • 图片保存—使用NSFileManager创建指定目录保存图片

    #import <UIKit/UIKit.h>

    @interface ViewController : UIViewController<UIImagePickerControllerDelegate,UINavigationControllerDelegate,UIActionSheetDelegate>

    @property (retain, nonatomic) IBOutlet UIImageView *imageView;
    @property (retain, nonatomic) UIButton *saveToFileButton;

    //打开相册
    - (IBAction)openAlbum:(id)sender;

    //从文件夹读取图片
    - (IBAction)readImage:(id)sender;

    @end

    #import "ViewController.h"
    //保存到文件夹按钮的标签,选取图片前,这个按钮是隐藏的
    #define SAVE_BUTTON_TAG 101

    @interface ViewController ()

    @end

    @implementation ViewController
    @synthesize imageView = _imageView;
    @synthesize saveToFileButton = _saveToFileButton;

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        //根据设置的tag获取按钮控件
        self.saveToFileButton = (UIButton *)[self.view viewWithTag:SAVE_BUTTON_TAG];
        //添加对象事件
        [self.saveToFileButton addTarget:self action:@selector(saveToFileBtnTapped:) forControlEvents:UIControlEventTouchUpInside];
        //设置为不可见
        self.saveToFileButton.hidden = YES;
    }

    - (void)viewDidUnload
    {
        [self setImageView:nil];
        [self setSaveToFileButton:nil];
        [super viewDidUnload];
        // Release any retained subviews of the main view.
    }

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
        return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
    }

    - (void)dealloc {
        [self.imageView release];
        [self.saveToFileButton release];
        [super dealloc];
    }

    - (IBAction)openAlbum:(id)sender {
        UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"选择图片" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"拍照",@"相册", nil];
        [actionSheet showInView:self.view];
        [actionSheet release];
    }

    //从文件夹读取图片
    - (IBAction)readImage:(id)sender {
        NSString *imagePath = [self imageSavedPath:@"image.png"];
        NSFileManager *fileManager = [NSFileManager defaultManager];
        //判断文件是否存在
        if (![fileManager fileExistsAtPath:imagePath]) {
            UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Note" message:@"文件不存在" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
            [alertView show];
            [alertView release];
        }else {
            //从指定目录读取图片
            UIImage *image = [UIImage imageWithContentsOfFile:imagePath];
            self.imageView.image = image;
        }
    }

    //保存到文件按钮事件
    - (void)saveToFileBtnTapped:(id)sender {
        NSString *imagePath = [self imageSavedPath:@"image.png"];
        BOOL isSaveSuccess = [self saveToDocument:self.imageView.image withFilePath:imagePath];
        
        if (isSaveSuccess) {
            UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"操作结果" message:@"保存图片成功" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
            [alertView show];
            [alertView release];
        }else {
            UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"操作结果" message:@"保存图片失败" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
            [alertView show];
            [alertView release];
        }
    }

    //将选取的图片保存到目录文件夹下
    -(BOOL)saveToDocument:(UIImage *) image withFilePath:(NSString *) filePath
    {
        if ((image == nil) || (filePath == nil) || [filePath isEqualToString:@""]) {
            return NO;
        }
        
        @try {
            NSData *imageData = nil;
            //获取文件扩展名
            NSString *extention = [filePath pathExtension];
            if ([extention isEqualToString:@"png"]) {
                //返回PNG格式的图片数据
                imageData = UIImagePNGRepresentation(image);
            }else{
                //返回JPG格式的图片数据,第二个参数为压缩质量:0:best 1:lost
                imageData = UIImageJPEGRepresentation(image, 0);
            }
            if (imageData == nil || [imageData length] <= 0) {
                return NO;
            }
            //将图片写入指定路径
            [imageData writeToFile:filePath atomically:YES];
            return  YES;
        }
        @catch (NSException *exception) {
            NSLog(@"保存图片失败");
        }
        
        return NO;
        
    }

    //根据图片名将图片保存到ImageFile文件夹中
    -(NSString *)imageSavedPath:(NSString *) imageName
    {
        //获取Documents文件夹目录
        NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentPath = [path objectAtIndex:0];
        //获取文件管理器
        NSFileManager *fileManager = [NSFileManager defaultManager];
        //指定新建文件夹路径
        NSString *imageDocPath = [documentPath stringByAppendingPathComponent:@"ImageFile"];
        //创建ImageFile文件夹
        [fileManager createDirectoryAtPath:imageDocPath withIntermediateDirectories:YES attributes:nil error:nil];
        //返回保存图片的路径(图片保存在ImageFile文件夹下)
        NSString * imagePath = [imageDocPath stringByAppendingPathComponent:imageName];
        return imagePath;
    }

    #pragma Delegate method UIImagePickerControllerDelegate
    //图像选取器的委托方法,选完图片后回调该方法
    -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo
    {
        if (image != nil) {
            //选定照片后在界面显示照片并把保存按钮设为可见
            self.imageView.image = image;
            self.saveToFileButton.hidden = NO;
        }
        //关闭图像选择器
        [self dismissModalViewControllerAnimated:YES];
    }

    -(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
    {
        //获取图片选取器
        UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
        //指定代理
        imagePicker.delegate = self;
        //打开图片后允许编辑
        imagePicker.allowsEditing = YES;
        
        //判断图片源的类型
        if (buttonIndex == 0) {
            if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
                //相机
                imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
            }
        }else if (buttonIndex == 1) {
            if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]){
                //图片库
                imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
            }
    //        if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]) {
    //            //相册
    //            imagePicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
    //        }
        }else if (buttonIndex == [actionSheet cancelButtonIndex]) {
            return;
        }
        
        //打开图片选择模态视图
        [self presentModalViewController:imagePicker animated:YES];
        [imagePicker release];

    }

    @end

  • 相关阅读:
    第六周学习进度总结
    构建之法阅读笔记03
    文件操作
    数组相关
    compareTo
    我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 比如n=3时,2*3的矩形块有3种覆盖方法:
    从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行
    整数中1出现的次数
    Java泛型(看着好有用)
    输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。
  • 原文地址:https://www.cnblogs.com/sungk/p/5063888.html
Copyright © 2011-2022 走看看