图片保存—使用NSFileManager创建指定目录保存图片

本文介绍了一个iOS应用中的图片处理流程,包括从相册选取图片、显示图片、保存图片到本地等功能,并详细展示了如何使用UIImagePickerController进行图片选择及后续处理。

#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

转载于:https://www.cnblogs.com/sungk/p/5063888.html

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值