本文共 5485 字,大约阅读时间需要 18 分钟。
打开图片选择器并裁减图片取出图片
效果:
源码:
图片切割源码:
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@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 ()@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];}// -------------------------------------------------------------------------------------- ///* */// 推出进入图片库- (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 *)pickerdidFinishPickingMediaWithInfo:(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是可以定制的.
转载地址:http://disva.baihongyu.com/