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

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

效果:

源码:

图片切割源码:

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

时间: 2024-10-29 11:49:58

打开图片选择器并裁减图片取出图片的相关文章

图片选择器,预览时取消选中,怎么让图片选择界面相对应的位置取消选中?

问题描述 图片选择器,预览时取消选中,怎么让图片选择界面相对应的位置取消选中? 我做了个图片选择器,跟微信添加图片的类似,现在做预览的时候,可以取消选择 这个选择这个图片,我可以拿到最终的选中图片集合,但当finish预览界面到图片 选择界面时,怎么用我最终选中的图片集合去改变在图片选择界面选中的状态? 解决方案 http://www.2cto.com/kf/201412/356979.html

Android 高仿QQ图片选择器_Android

当做一款APP,需要选择本地图片时,首先考虑的无疑是系统相册,但是Android手机五花八门,再者手机像素的提升,大图无法返回等异常因数,导致适配机型比较困难,微信.QQ都相继的在自己的APP里集成了图片选择功能,放弃了系统提供的图片选择器,这里仿造QQ做了一个本地图片选择器,PS:之前有人说"仿"写成"防"了,今儿特意注意了下,求不错. 先上一张效果图,无图无真相啊~~~ 实现的效果大概是这样的: 1.单选:跳转到本地图片选择文件夹,选择文件夹后,进入到该文件夹下

Android仿微信图片选择器_Android

很多项目要用到图片选择控件,每次都要写一大堆逻辑.于是基于图片选择组件(PhotoPicker)封装了一个控件PhotoUploadView.方便简易,一键集成,几句代码就可以添加类似微信的图片选择控件了.下面介绍一下该控件有些什么特点以及怎么使用.先看图: 效果如上图,点击加号弹出选择框,目前提供了两种形式,一个如图所见的PopupWindow,另一个是MaterialDialog,选择拍照或者从图库获取,从图库获取后就进入图二,选择完之后就图三或图四这里因为很多项目需要不一样,所以特别封装了

翻翻git之---史上最强的图片选择器 GalleryFinal(顺带附下麦麦,当当的近照)

转载请注明出处:王亟亟的大牛之路 技术内容在P2,P1是废话可以跳过 P1:(开胃菜) 最近手头上工作的事差不多告一段落了,可以把更多的精力花在学习上了,还是会继续翻git这部分的文章(搬运工),然后准备整整一些之前没接触过的知识点(具体学什么没想好,等会看看去) 先上一下家里宝贝的近照 P2:(正菜) 今天上的是一个自称是"史上最强的图片选择器" GalleryFinal 话不多说先看看效果 作者几乎实现了我们平时所需的"皂片"选择器的所有功能,还带有一定的编辑和

Android图片选择器

1.概述            应公司项目需求,要做一个图片选择器,网上搜索了一些源码,我在别人的基础上进行了修改,另外页面也进行了重整,我的是先加载图片文件夹列表,然后再进入选择图片.            参考博客地址:http://blog.csdn.net/lmj623565791/article/details/39943731            修改bug:可以扫描gif文件,并且后缀名是大写的也可以扫描出来 例如:image.GIF 效果图如下: 2.扫描图片文件夹的核心代码,

小米手机-Android 从媒体库取出图片发送的问题

问题描述 Android 从媒体库取出图片发送的问题 先上代码 Intent picture = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(picture, IMAGE); 然后在onActivityResult方法中 if (requestCode == IMAGE && resultCode =

图片显示-电脑打开文件夹,总是不能看到图片

问题描述 电脑打开文件夹,总是不能看到图片 打开文件夹的时候显示图片总是不能看到图片内容,是不是因为设置了什么属性??? 解决方案 看看有没有"查看"-〉"缩略图",貌似右键菜单有选择查看方式的... 解决方案二: 在放置图片的文件夹下右键->查看->选择要查看的方式.

uiimageview-导航条不显示取出图片

问题描述 导航条不显示取出图片 有一个按钮用来从相册中取图片.取出的图片要显示在导航条和分享按钮中.但是导航条并不显示.我用了[self.navigationController.navigationBar setHidden:NO]; -(void)showAlbum:(id)sender{ imagePicker=[[UIImagePickerController alloc]init]; imagePicker.delegate = self; imagePicker.allowsEdit

前端-为什么有些图片链接可以下载,有些图片链接却在新标签打开

问题描述 为什么有些图片链接可以下载,有些图片链接却在新标签打开 开发中遇到问题,想做到点击链接下载图片, 可是有些图片链接可以下载,有些图片链接却在新标签打开, 不知道对图片路径有什么限制 解决方案 很有可能是浏览器的原因,你试下在同一个浏览器,再试一下另一个浏览器