iOS--OC语言相机封装----包含保存与读取

xiaoxiao2021-02-28  96

#import <UIKit/UIKit.h>

typedef  NS_ENUM(NSUInteger,imagePickerStyle){

    ImagePickerStyleCamera,

    ImagePickerStylePhotoLibrary

};

@protocol WPhotoImagePickerViewControllerDelegate <NSObject>

-(void)imageChooseFinish:(UIImage *)image;

@end

/**

 *  保存成功回调

 *

 *  @param success 保存成功的block

 */

typedef void(^resultBlock)(BOOL success);

@interface WPhotoImagePickerViewController : UIImagePickerController

/**

 *  SZKImagePickerVCDelegate

 */

@property(nonatomic,assign)id<WPhotoImagePickerViewControllerDelegate>WPhotoImageDelegate;

/**

 *  初始化SZKImagePicker

 *

 *  @param style 打开照相机或者图库

 *

 *  @return  初始化SZKImagePicker

 */

-(instancetype)initWithImagePickerStyle:(imagePickerStyle)style;

/**

 *  保存图片到沙盒

 *

 *  @param image     要保存的图片

 *  @param imageName 保存的图片名称

 *  @param block     保存成功的值

 */

+(void)saveImageToSandbox:(UIImage *)image

             andImageNage:(NSString *)imageName

           andResultBlock:(resultBlock)block;

/**

 *  沙盒中获取到的照片

 *

 *  @param imageName 读取的照片名称

 *

 *  @return 从沙盒读取到的照片

 */

+(UIImage *)loadImageFromSandbox:(NSString *)imageName;

/**

 *  根据文件获取沙盒路径

 *

 *  @param fileName 文件名称

 *

 *  @return 文件在沙盒中的路径

 */

+(NSString *)filePath:(NSString *)fileName;

@end

#import "WPhotoImagePickerViewController.h"

@interface WPhotoImagePickerViewController ()<UIImagePickerControllerDelegate>

@end

@implementation WPhotoImagePickerViewController

-(instancetype)initWithImagePickerStyle:(imagePickerStyle)style {

    self=[super init];

    if (self) {

        if (style==ImagePickerStyleCamera) {

            self.sourceType=UIImagePickerControllerSourceTypeCamera;

        }else if(style==ImagePickerStylePhotoLibrary) {

            self.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;

        }

    }

    return self;

}

- (void)viewDidLoad {

    [super viewDidLoad];

    

    self.allowsEditing= YES;

    self.delegate     = self;

    

    self.view.backgroundColor=[UIColor colorWithWhite:0.875 alpha:1.000];

    

}

#pragma mark---选取照片

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info {

    //界面返回

    [picker dismissViewControllerAnimated:YES completion:nil];

    //获取编辑之后的图片

    UIImage *editedImage=[info objectForKey:UIImagePickerControllerEditedImage];

    //将获取的image传入代理方法中

    [self.WPhotoImageDelegate imageChooseFinish:editedImage];

}

#pragma mark----将照片保存到沙盒

+(void)saveImageToSandbox:(UIImage *)image andImageNage:(NSString *)imageName andResultBlock:(resultBlock)block {

    //高保真压缩图片,此方法可将图片压缩,但是图片质量基本不变,第二个参数为质量参数

    NSData *imageData=UIImageJPEGRepresentation(image, 0.5);

    //将图片写入文件

    NSString *filePath=[self filePath:imageName];

    //是否保存成功

    BOOL result=[imageData writeToFile:filePath atomically:YES];

    //保存成功传值到blcok

    if (result) {

        block(result);

    }

}

#pragma mark----从沙盒中读取照片

+(UIImage *)loadImageFromSandbox:(NSString *)imageName {

    //获取沙盒路径

    NSString *filePath=[self filePath:imageName];

    //根据路径读取image

    UIImage *image=[UIImage imageWithContentsOfFile:filePath];

    

    return image;

}

#pragma mark----获取沙盒路径

+(NSString *)filePath:(NSString *)fileName {

    //获取沙盒目录

    NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    //保存文件名称

    NSString *filePath=[paths[0] stringByAppendingPathComponent:fileName];

    

    NSLog(@"%@",filePath);

    

    return filePath;

}

@end

转载请注明原文地址: https://www.6miu.com/read-70368.html

最新回复(0)