zoukankan      html  css  js  c++  java
  • 打开图片选择器并裁减图片取出图片

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

    效果:

    源码:

    图片切割源码:

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

     
     
  • 相关阅读:
    [SDOI2015] 序列统计
    [BZOJ3514] Codechef MARCH14 GERALD07加强版
    [CF1082E] Increasing Frequency
    [CF1093G] Multidimensional Queries
    [HNOI2013] 切糕
    [HEOI2017] 寿司餐厅 + 最大权闭合子图的总结
    [BZOJ3771] Triple
    [HEOI2016] 字符串
    [总结] 后缀数组学习笔记
    [Luogu 3613] 睡觉困难综合征
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/3927321.html
Copyright © 2011-2022 走看看