图片保存—使用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

时间: 2024-10-17 16:36:05

图片保存—使用NSFileManager创建指定目录保存图片的相关文章

[php] PHP创建指定目录和文件

前几天看到有人问PHP环境下如何创建文件到指定目录下,正好自己最近在学习,经过一翻测试,终于出结果了,贴出来与大家分享. 目录结构:代码所在的文件wwwroot/mydir/test/test.php 创建目录:在wwwroot/mydir/下创建目录testjiang123. 创建文件:在wwwroot/mydir/testjiang123/下创建文件test.html. //创建文件夹 $username="testjiang123"; $dir="../mydir/&q

Android—将Bitmap图片保存到SD卡目录下或者指定目录

直接上代码就不废话啦 一:保存到SD卡下 [java] view plain copy File file = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis()+".jpg"); try { out = new FileOutputStream(file); btImage.compress(Bitmap.CompressFormat.JPEG, 90, out); System

WPF-模拟动态更换logo的过程(2),如何把网上的图片下载到指定目录。

上一步,我们已经获取了图片应该保存的地址.现在只需要传入URL把图片下载到指定目录. 从网上下载图片也有俩种方法. 第一种: WebRequest request = WebRequest.Create("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1578031102838&di=1d5e032e5139eef33ab821b5f3522b64&imgtype=0

利用wget下载文件,并保存到指定目录

利用WGET下载文件,并保存到指定目录 [email protected] ~/下载 $ wget -P /home/cbx/下载/PDF https://www.linuxmint.com/documentation/user-guide/Cinnamon/chinese_16.0.pdf https://www.linuxmint.com/documentation.php wget是Linux上一个非常不错的下载指令,而其指令的内容虽然说是非常简单,但内藏许多的参数,也算是Linux工作者

一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本

摘自:http://blog.csdn.net/forandever/article/details/5711319 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本 @for&ever 2010-07-03 功能: 获取指定目录下面符合一定规则的文件名称和文件修改时间,并保存到指定的文件中 脚本如下: #!/usr/bin/env python# -*- coding: utf-8 -*- '''Created on 2010-7-2 @author: fore

使用for循环创建在指定目录下批量创建文件并重命名所有文件

要求1: 使用for循环在/root/scripts/practice/q1/oldboy 目录下创建十个文件.名称依次为: oldboy-1, oldboy-2, ..... oldboy-10. 脚本实现: #!/bin/bash #Question1 shopt -s expand_aliases alias ll="ls -l" cd /root/scripts/practice/q1 #首先判断目录是否存在,不存在则创建目录 if [ ! -e oldboy ] then  

1.5.2 添加一个用户lidao指定uid为888 禁止用户登录系统 不创建家目录

添加一个用户lidao指定uid为888 禁止用户登录系统 不创建家目录 #添加一个傀儡用户lidao 并指定这个用户的uid为888 [[email protected]~]# #添加一个用户lidao指定uid为888 禁止用户登录系统 不创建家目录 [[email protected]~]# useradd -u 888 -s /sbin/nologin -M lidao888 [[email protected]~]# id lidao888 uid=888(lidao888)gid=8

shell脚本:创建函数并指定目录进行下载

写一个脚本: 1.创建一个函数,能接受两个参数: 1)第一个参数为URL,即可下载的文件:第二个参数为目录,即下载后保存的位置: 2)如果用户给的目录不存在,则提示用户是否创建:如果创建就继续执行,否则,函数返回一个51的错误值给调用脚本: 3)如果给的目录存在,则下载文件:下载命令执行结束后测试文件下载成功与否:如果成功,则返回0给调用脚本,否则,返回52给调用脚本: 题目来源于51cto论坛帖子,参考大神的答案,然后自己完善做出来了,大家有更优秀的方法也不妨写出来. #!/bin/bash

android中如何获取指定目录下的图片

需要对指定目录的图片文件进行列表,借鉴了网上的方法,发现列表出来是所有的文件,这样用起来很不方便,在这里也没找到解决的办法,经过自己的进一步研究终于搞定,发上来给有用的同学.用下面这种方式能实现查询实现查询sd卡某一个子目录下的图片文件详细信息 : //selection: 指定查询条件 String selection = MediaStore.Images.Media.DATA + " like %?"; //设定查询目录 String path="/mnt/sdcard