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

简介:

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

效果:

源码:

图片切割源码:

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是可以定制的.

目录
相关文章
|
7月前
|
开发工具
如何拖拽图片放到指定的格子里?
如何拖拽图片放到指定的格子里?
104 0
图片和文件预览组件(部分源码),可拖动,缩小,放大。 #41
图片和文件预览组件(部分源码),可拖动,缩小,放大。 #41
150 0
|
开发工具
如何拖拽图片放到指定的格子里
嗨!大家好,我是小蚂蚁。 今天来分享一个如何在游戏中拖拽一个图片,然后把它放到指定的格子里,效果如下图: 这个基础的操作在很多的游戏中都有应用,例如棋类游戏,拖拽消除合成类游戏,或者是在背包装备栏等地方。总之,只要有这种格子类的布局,并且又需要拖拽放置操作,那么这个功能就会被需要。
183 0
|
前端开发
canvas实现海报 两张图片合成一张并且可以保存
canvas实现海报 两张图片合成一张并且可以保存
canvas实现海报 两张图片合成一张并且可以保存
|
图形学
PPT制作三大技巧:图标 、图片背景透明和自动函数
PPT制作三大技巧:图标 、图片背景透明和自动函数
295 0
PPT制作三大技巧:图标 、图片背景透明和自动函数
|
计算机视觉
【图片操作】生成动态图片
动态图片我们使用的还是比较频繁的,平时的表情包有很多动图。今天我们要做的就是自己制作动态图片,其实就是将视频转换成动图,操作起来非常简单。下面我们就来看看如何实现吧。
581 0
img图片下方出现空隙的原因及解决办法
img图片下方出现空隙的原因及解决办法
266 0
|
JavaScript
使用 jQuery 操作页面元素的方法,实现浏览大图片的效果,在页面上插入一幅小图片,当鼠标悬停到小图片上时,在小图片的右侧出现与之相对应的大图片
使用 jQuery 操作页面元素的方法,实现浏览大图片的效果,在页面上插入一幅小图片,当鼠标悬停到小图片上时,在小图片的右侧出现与之相对应的大图片
274 0
使用 jQuery 操作页面元素的方法,实现浏览大图片的效果,在页面上插入一幅小图片,当鼠标悬停到小图片上时,在小图片的右侧出现与之相对应的大图片
Word文档中插入的图片显示不全、嵌入式图片显示不全解决方法,仅设置图片为单倍行距方法
Word文档中插入的图片显示不全、嵌入式图片显示不全解决方法,仅设置图片为单倍行距方法
888 0
Word文档中插入的图片显示不全、嵌入式图片显示不全解决方法,仅设置图片为单倍行距方法
Halcon打开图片:单个图片以及遍历读取文件夹里的所有图片
Halcon打开图片:单个图片以及遍历读取文件夹里的所有图片
986 0