IOS开发之保存图片到Documents目录及PNG,JPEG格式相互转换

来源:互联网 发布:ecshop数据库表结构 编辑:程序博客网 时间:2024/05/22 19:43
http://hi.baidu.com/shinekrad/item/1d8de0d0900359f693a974c4

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary*)info {

    NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];

    if ([mediaType isEqualToString:@"public.image"]){

        image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];

        NSData *data;

        if (UIImagePNGRepresentation(image) == nil) {

            data = UIImageJPEGRepresentation(image, 1);

        } else {

            data = UIImagePNGRepresentation(image);

        }

        

        NSFileManager *fileManager = [NSFileManager defaultManager];

        NSString *filePath = [NSString stringWithString:[self getPath:@"image1"]];         //将图片存储到本地documents


         [fileManager createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil];

         [fileManager createFileAtPath:[filePath stringByAppendingString:@"/image.png"] contents:dataattributes:nil];

        

        UIImage *editedImage = [[UIImage alloc] init];

        editedImage = image;

        CGRect rect = CGRectMake(0, 0, 64, 96);

        UIGraphicsBeginImageContext(rect.size);

        [editedImage drawInRect:rect];

        editedImage = UIGraphicsGetImageFromCurrentImageContext();

        

        UIButton *imageButton = [UIButton buttonWithType:UIButtonTypeCustom];

        imageButton.frame = CGRectMake(10, 10, 64, 96);

        [imageButton setImage:editedImage forState:UIControlStateNormal];

        [self.view addSubview:imageButton];

        [imageButton addTarget:self action:@selector(imageAction:)forControlEvents:UIControlEventTouchUpInside];


        [ipc dismissModalViewControllerAnimated:YES];

    } else {

        NSLog(@"MEdia");

    }

    

上面的代码是当从相册里面选取图片之后保存到本地程序沙盒,在上面我们得到的图片中不能够得到图片名字,以及不清楚图片格式,所以这个时候我们需要将其转换成NSdata二进制存储,

 image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];

NSData *data;

        if (UIImagePNGRepresentation(image) == nil) {

            data = UIImageJPEGRepresentation(image, 1);

        } else {

            data = UIImagePNGRepresentation(image);

        }

UIImagePNGRepresentation转换PNG格式的图片为二进制,如果图片的格式为JPEG则返回nil;

 [fileManager createFileAtPath:[filePath stringByAppendingString:@"/image.png"] contents:data attributes:nil];    将图片保存为PNG格式

 [fileManager createFileAtPath:[filePath stringByAppendingString:@"/image.jpg"] contents:data attributes:nil];   将图片保存为JPEG格式


我们也可以写成下面的格式存储图片

NSString *pngImage = [filePath stringByAppendingPathComponent:@"Documents/image.png"];

NSString *jpgImage = [filePath stringByAppendingPathComponent:@"Documents/image.jpg"];


[data writeToFile:pngImage atomically:YES];

[data writeToFile:jpgImage atomically:YES];