https://github.com/YouXianMing

打开图片选择器并裁减图片取出图片

打开图片选择器并裁减图片取出图片

效果:

源码:

图片切割源码:

UIImage+ImagePickerCrop.h 与 UIImage+ImagePickerCrop.m

//
//  UIImage+ImagePickerCrop.h
//  ImagePickerCropDemo
//
//  Created by Frank Schmitt on 4/1/14.
//  Copyright (c) 2014 Frank Schmitt. See LICENSE. 
//

#import <UIKit/UIKit.h>

@interface UIImage (ImagePickerCrop)

+ (UIImage *)croppedImageWithImagePickerInfo:(NSDictionary *)info;

@end
//
//  UIImage+ImagePickerCrop.m
//  ImagePickerCropDemo
//
//  Created by Frank Schmitt on 4/1/14.
//  Copyright (c) 2014 Frank Schmitt. See LICENSE. 
//

#import "UIImage+ImagePickerCrop.h"

@implementation UIImage (ImagePickerCrop)

+ (UIImage *)croppedImageWithImagePickerInfo:(NSDictionary *)info {
    UIImage *originalImage = [info objectForKey:UIImagePickerControllerOriginalImage];
    CGRect cropRect = [[info objectForKey:UIImagePickerControllerCropRect] CGRectValue];
    CGAffineTransform rotateTransform = CGAffineTransformIdentity;
    
    switch (originalImage.imageOrientation) {
        case UIImageOrientationDown:
            rotateTransform = CGAffineTransformRotate(rotateTransform, M_PI);
            rotateTransform = CGAffineTransformTranslate(rotateTransform, -originalImage.size.width, -originalImage.size.height);
            break;
            
        case UIImageOrientationLeft:
            rotateTransform = CGAffineTransformRotate(rotateTransform, M_PI_2);
            rotateTransform = CGAffineTransformTranslate(rotateTransform, 0.0, -originalImage.size.height);
            break;
            
        case UIImageOrientationRight:
            rotateTransform = CGAffineTransformRotate(rotateTransform, -M_PI_2);
            rotateTransform = CGAffineTransformTranslate(rotateTransform, -originalImage.size.width, 0.0);
            break;
            
        default:
            break;
    }
    
    CGRect rotatedCropRect = CGRectApplyAffineTransform(cropRect, rotateTransform);
    
    CGImageRef croppedImage = CGImageCreateWithImageInRect([originalImage CGImage], rotatedCropRect);
    UIImage *result = [UIImage imageWithCGImage:croppedImage scale:[UIScreen mainScreen].scale orientation:originalImage.imageOrientation];
    CGImageRelease(croppedImage);
    
    return result;
}

@end

正常使用的源码:

//
//  RootViewController.m
//  ImagePicker
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "RootViewController.h"
#import "DemoButton.h"
#import "UIImage+ImagePickerCrop.h"

@interface RootViewController ()<DemoButtonDelegate, UIScrollViewDelegate, UIActionSheetDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate>

@end

@implementation RootViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    DemoButton *button = [[DemoButton alloc] initWithFrame:CGRectMake(0, 0, 170, 45)
                                                     title:@"YouXianMing"];
    button.delegate    = self;
    button.center      = self.view.center;
    [self.view addSubview:button];
}

// -------------------------------------------------------------------------------------- //
/*
    <UIScrollViewDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate>
*/

// 推出进入图片库
- (void)displayImagePickerPhotoLibrary
{
    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
    
    imagePicker.delegate             = self;
    imagePicker.sourceType           = UIImagePickerControllerSourceTypePhotoLibrary;
    imagePicker.allowsEditing        = YES; // 允许编辑
    imagePicker.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    
    if ([self isKindOfClass:[UIViewController class]])
    {
        // 推出控制器
        [self presentViewController:imagePicker
                           animated:YES
                         completion:nil];
    }
    else
    {
        NSLog(@"不是控制器");
    }
}

// 推出进入照相机
- (void)displayImagePickerCamera
{
    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
    
    imagePicker.delegate             = self;
    imagePicker.sourceType           = UIImagePickerControllerSourceTypeCamera;
    imagePicker.allowsEditing        = YES; // 允许编辑
    imagePicker.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    
    if ([self isKindOfClass:[UIViewController class]])
    {
        // 推出控制器
        [self presentViewController:imagePicker
                           animated:YES
                         completion:nil];
    }
    else
    {
        NSLog(@"不是控制器");
    }
}

// 代理
- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    [self dismissViewControllerAnimated:YES
                             completion:nil];
    
    // 获取到了图片
    UIImage *tmpImage = [UIImage croppedImageWithImagePickerInfo:info];
    NSLog(@"%@", NSStringFromCGSize(tmpImage.size));
}
// -------------------------------------------------------------------------------------- //




- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == actionSheet.cancelButtonIndex)
    {
        return;
    }
    
    if (buttonIndex == 0)
    {
        [self displayImagePickerCamera];
    }
    else if (buttonIndex == 1)
    {
        [self displayImagePickerPhotoLibrary];
    }
}

#pragma mark - 按钮代理
- (void)demoButtonEvent:(DemoButton *)button
{
    UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"您要上传头像?"
                                                       delegate:self
                                              cancelButtonTitle:@"取消"
                                         destructiveButtonTitle:nil
                                              otherButtonTitles:@"拍照", @"选择已有图片", nil];
    [sheet showInView:self.view];
}

@end

注意哦,这些都是需要在真机环境下测试的呢,还有,那个DemoButton是我自己写的类,需要你自行替换掉才行呢.

有几个代理是需要引入的.

当然,要知道,这个UIImagePickerController是可以定制的.

 

 

 

 

 

 

 

 

 

 

 

 

 

 
 
posted @ 2014-08-22 09:04  YouXianMing  阅读(310)  评论(0编辑  收藏  举报