一句话选择单个头像图片

新建ImagePickerViewController类:

/* let imagePicker = ImagePickerViewController()

imagePicker.delegate = self

self.presentViewController(imagePicker, animated: false, completion: nil)

*/

实现类代理方法

//MARK: -ImagePickerViewDelegate

extension FourViewController:ImagePickerViewDelegate{

func getImage(image: UIImage) {

headView?.headImage?.image = image

}

}

ImagePickerViewController类中实现代码

import UIKit

import AVFoundation

import MobileCoreServices

protocol ImagePickerViewDelegate {

func getImage(image:UIImage)

}

class ImagePickerViewController: UIViewController,UIActionSheetDelegate {

var delegate:ImagePickerViewDelegate?

var alertController:UIAlertController?

var pickCtr:UIImagePickerController?

init(){

super.init(nibName: nil, bundle: nil)

self.modalPresentationStyle = .OverFullScreen

self.view.backgroundColor = UIColor.clearColor()

pickCtr = UIImagePickerController()

pickCtr!.delegate = self;

pickCtr!.allowsEditing = true;

}

required init?(coder aDecoder: NSCoder) {

fatalError("init(coder:) has not been implemented")

}

override func viewDidAppear(animated: Bool) {

super.viewDidAppear(animated)

if (alertController == nil) {

alertController = UIAlertController(title: "选择文件源", message: nil, preferredStyle: .ActionSheet)

alertController?.addAction(UIAlertAction(title: "打开相机", style: .Default, handler: { (action) in

self.takePhoto()

}))

alertController?.addAction(UIAlertAction(title: "打开相册", style: .Default, handler: { (action) in

self.localPhoto()

}))

alertController?.addAction(UIAlertAction(title: "取消", style: .Default, handler: { (action) in

self.dismissViewControllerAnimated(false, completion: nil)

}))

self.presentViewController(alertController!, animated: true, completion: nil)

}

}

/// 打开相册

func localPhoto(){

if (self.isPhotoLibraryAvailable()){

pickCtr?.sourceType = UIImagePickerControllerSourceType.PhotoLibrary

self.presentViewController(pickCtr!, animated: true, completion: nil)

}else{

let alert = UIAlertController(title: nil, message: "相册不可用", preferredStyle: UIAlertControllerStyle.Alert)

alert.addAction(UIAlertAction(title: "确定", style: UIAlertActionStyle.Default, handler: { (action) in

self.dismissViewControllerAnimated(false, completion: nil)

}))

self.presentViewController(alert, animated: true, completion: nil)

}

}

/// 打开相机takePhoto

func takePhoto(){

let mediaType = AVMediaTypeVideo

let authStatus = AVCaptureDevice.authorizationStatusForMediaType(mediaType)

let you = self.isCameraAvailable()==true

let my = self.doesCameraSupportTakingPhotos()==true

pprintLog("you:\(you)")

pprintLog("my:\(my)")

pprintLog("myandyou:\(my&&you)")

if(authStatus == AVAuthorizationStatus.Restricted || authStatus == AVAuthorizationStatus.Denied){

let alert = UIAlertController(title: nil, message: "相机不可用,请到系统设置里更改", preferredStyle: UIAlertControllerStyle.Alert)

alert.addAction(UIAlertAction(title: "确定", style: UIAlertActionStyle.Default, handler: { (action) in

self.dismissViewControllerAnimated(false, completion: nil)

}))

self.presentViewController(alert, animated: true, completion: nil)

}else if(self.isCameraAvailable()==true && self.doesCameraSupportTakingPhotos()==true){

pickCtr!.sourceType = UIImagePickerControllerSourceType.Camera

self.presentViewController(pickCtr!, animated: true, completion: nil)

}else{

let alert = UIAlertController(title: nil, message: "相机不可用", preferredStyle: UIAlertControllerStyle.Alert)

alert.addAction(UIAlertAction(title: "确定", style: UIAlertActionStyle.Default, handler: { (action) in

self.dismissViewControllerAnimated(false, completion: nil)

}))

self.presentViewController(alert, animated: true, completion: nil)

}

}

override func viewDidLoad() {

super.viewDidLoad()

}

override func didReceiveMemoryWarning() {

super.didReceiveMemoryWarning()

}

}

//MARK: - UIImagePickerControllerDelegate

extension ImagePickerViewController:UIImagePickerControllerDelegate,UINavigationControllerDelegate{

//取消

func imagePickerControllerDidCancel(picker: UIImagePickerController) {

pickCtr?.dismissViewControllerAnimated(true, completion: {

self.dismissViewControllerAnimated(false, completion: nil)

})

}

// 得到图片

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {

let type:String = info[UIImagePickerControllerMediaType] as! String

if (type == kUTTypeImage as String){

let img:UIImage = info[UIImagePickerControllerEditedImage] as! UIImage

//对拍照后的照片进行处理

let image1 = self.fixOrientationIm(img)

//防止图片翻滚

let image2 = self.fixOrientationIm(image1)

//改变图片的size

let image3 = self.image(image2, targetSize: CGSizeMake(110, 80))

pickCtr?.dismissViewControllerAnimated(true, completion: {

self.dismissViewControllerAnimated(false, completion: {

self.delegate?.getImage(image3)

})

})

}

}

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) {

}

}

/// 判断手机是否支持。。相机....

extension ImagePickerViewController{

/// 判断设备是否有摄像头

func isCameraAvailable()->Bool{

return UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera)

}

/// 后面的摄像头是否可用

func isRearCameraAvailable()->Bool{

return UIImagePickerController.isCameraDeviceAvailable(UIImagePickerControllerCameraDevice.Rear)

}

/// 前面的摄像头是否可用

func isFrontCameraAvailable()->Bool{

return UIImagePickerController.isCameraDeviceAvailable(UIImagePickerControllerCameraDevice.Front)

}

/// 相册是否可用

func isPhotoLibraryAvailable()->Bool{

return UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.PhotoLibrary)

}

/// 相机是否可以取到图片

func doesCameraSupportTakingPhotos()->Bool{

return self.cameraSupportsMedia( kUTTypeImage as String, paramSourceType: UIImagePickerControllerSourceType.Camera)

}

/// 相机是否可以取到视频

func doesCameraSupportTakingVideos()->Bool{

return self.cameraSupportsMedia( kUTTypeMovie as String, paramSourceType: UIImagePickerControllerSourceType.Camera)

}

/// 相册是否可以取到视频

func canUserPickVideosFromPhotoLibrary()->Bool{

return self.cameraSupportsMedia(kUTTypeMovie as String, paramSourceType: UIImagePickerControllerSourceType.PhotoLibrary)

}

/// 相册是否可以取到图片

func canUserPickPhotosFromPhotoLibrary()->Bool{

return self.cameraSupportsMedia(kUTTypeImage as String, paramSourceType: UIImagePickerControllerSourceType.PhotoLibrary)

}

func cameraSupportsMedia(paramMediaType:String,paramSourceType:UIImagePickerControllerSourceType)->Bool{

var result = false

if paramMediaType.characters.count==0{

return false

}

let availableMediaTypes:NSArray? = UIImagePickerController.availableMediaTypesForSourceType(paramSourceType)

if availableMediaTypes != nil{

availableMediaTypes!.enumerateObjectsUsingBlock { (obj, idx,stop) in

let mediaType:String = obj as! String

if mediaType == paramMediaType{

result = true

//        stop = true;

}

}

}

return result;

}

}

//MARK: - 图片方法

extension ImagePickerViewController{

//MARK:- 相机照片处理

func fixOrientationIm(aImage:UIImage) -> UIImage{

// No-op if the orientation is already correct

if (aImage.imageOrientation == UIImageOrientation.Up){

return aImage

}

// We need to calculate the proper transformation to make the image upright.

// We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored.

var transform  = CGAffineTransformIdentity

switch (aImage.imageOrientation) {

case UIImageOrientation.Down:

break

case UIImageOrientation.DownMirrored:

transform = CGAffineTransformTranslate(transform, aImage.size.width, aImage.size.height);

transform = CGAffineTransformRotate(transform, CGFloat(M_PI));

break

case UIImageOrientation.Left:

break

case UIImageOrientation.LeftMirrored:

transform = CGAffineTransformTranslate(transform, aImage.size.width, 0);

transform = CGAffineTransformRotate(transform, CGFloat(M_PI_2));

break

case UIImageOrientation.Right:

break

case UIImageOrientation.RightMirrored:

transform = CGAffineTransformTranslate(transform, 0, aImage.size.height);

transform = CGAffineTransformRotate(transform, -CGFloat(M_PI_2));

break

default:

break

}

switch (aImage.imageOrientation) {

case UIImageOrientation.UpMirrored:

break

case UIImageOrientation.DownMirrored:

transform = CGAffineTransformTranslate(transform, aImage.size.width, 0);

transform = CGAffineTransformScale(transform, -1, 1);

break

case UIImageOrientation.LeftMirrored:

break

case UIImageOrientation.RightMirrored:

transform = CGAffineTransformTranslate(transform, aImage.size.height, 0);

transform = CGAffineTransformScale(transform, -1, 1);

break

default:

break

}

// Now we draw the underlying CGImage into a new context, applying the transform

// calculated above.

let ctx:CGContextRef = CGBitmapContextCreate(nil, Int(aImage.size.width), Int(aImage.size.height), CGImageGetBitsPerComponent(aImage.CGImage!), 0, CGImageGetColorSpace(aImage.CGImage!)!, CGImageGetBitmapInfo(aImage.CGImage!).rawValue)!

CGContextConcatCTM(ctx, transform);

switch (aImage.imageOrientation) {

case UIImageOrientation.Left:

break

case UIImageOrientation.LeftMirrored:

break

case UIImageOrientation.Right:

break

case UIImageOrientation.RightMirrored:

// Grr...

CGContextDrawImage(ctx, CGRectMake(0,0,aImage.size.height,aImage.size.width), aImage.CGImage!);

break

default:

CGContextDrawImage(ctx, CGRectMake(0,0,aImage.size.width,aImage.size.height), aImage.CGImage!);

break

}

// And now we just create a new UIImage from the drawing context

let cgimg = CGBitmapContextCreateImage(ctx)

let img = UIImage(CGImage: cgimg!)

//        CGContextRelease(ctx)

//        CGImageRelease(cgimg)

return img;

}

/// 裁剪图片

func image(image:UIImage,targetSize:CGSize)-> UIImage{

UIGraphicsBeginImageContext(targetSize)

image.drawInRect(CGRectMake(0, 0, targetSize.width, targetSize.height))

let newImage = UIGraphicsGetImageFromCurrentImageContext()

UIGraphicsEndImageContext()

return newImage!

}

///得到图片

func getImageWithName(iName:String)->UIImage{

let cloudIcon = UIImage(contentsOfFile: self.cachedPicPath(iName))

return cloudIcon!

}

/// 存储图片

func saveImage(image:UIImage,name:String){

UIImagePNGRepresentation(image)?.writeToFile(name, atomically: true)

}

/// 获取图片路径

func cachedPicPath(imageN:String)->String{

let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentationDirectory, NSSearchPathDomainMask.UserDomainMask, true)

let documentsPath:NSString = paths.first! as NSString

let imageName = imageN+".png"

let path = documentsPath.stringByAppendingPathComponent(imageName)

return path

}

}

swift 2 选择头像图片的更多相关文章

  1. 相册选择头像或者拍照 上传头像以NSData 图片二进制格式 表单上传

    一.点击头像图片 或者按钮 在相册选择照片返回img,网络上传头像要用data表单上传 (1)上传头像属性 // 图片二进制格式 表单上传 @property (nonatomic, strong) ...

  2. swift上传头像

    很久没有写博客了,今天特地写了这个,也是一边仿照别人写的demo,注释部分都是需要的.需要的同学可以参考一下. @IBAction func headImageBtnPage(){  //上传头像 / ...

  3. Android中调用另一个Activity并返回结果-以模拟选择头像功能为例

    场景 Android中点击按钮启动另一个Activity以及Activity之间传值: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/detail ...

  4. ajax实现注册并选择头像后上传

    在初次接触ajax后,我们做了一个crm训练的项目,大多数小组都有注册用户这一项,但是都忽略掉了一个功能,那就是,很多网站的注册是可以上传头像的,在这里我做了一个在已有的头像数组里选择图片上传作头像的 ...

  5. php使用post动态选择头像和js事件动态改变头像

    <html> <head> <meta http-equit="Content-type" content="text/html" ...

  6. jQuery滑过头像图片展示个人信息效果

    这是一款经典的jQuery图片插件,同时,也可以是一款jQuery提示框插件.这款jQuery插件的功能是当你把鼠标滑过头像图片缩略图时,即可弹出头像对应用户的详细个人信息,弹出的标签虽然不大,但是还 ...

  7. Android选择头像

    http://www.jianshu.com/p/8b3e78046c1c 注意:在Android6.0之后,使用相机拍照需要权限 在选择头像使用相机拍摄时添加以下代码即可. Acp.getInsta ...

  8. Android实战简易教程-第二十八枪(基于Bmob实现头像图片设置和网络上传功能!)

    上一篇我们介绍了怎样由uri转换成String ,本文就用到了上篇文章的方法.以下我们介绍一下怎样设置头像后将头像图片上传到云端的方法,本文基于Bmob提供的服务. 看一下代码:(布局文件和前两篇文章 ...

  9. 「小程序JAVA实战」小程序头像图片上传(下)(45)

    转自:https://idig8.com/2018/09/09/xiaochengxujavashizhanxiaochengxutouxiangtupianshangchuan44/ 接下来,我们应 ...

随机推荐

  1. ASP.NET MVC3开发-数据库篇之CodeFisrt开发(一)

    本文讲述了在ASP.NET MVC3开发中M层使用Code Fisrt如何进行开发,由于作者对ASP.NET MVC3的学习不是很深,所以写的都是些基本的内容(写的如有不正确的地方请评论指正),适合初 ...

  2. Python之FTP多线程下载文件之多线程分块下载文件

    Python之FTP多线程下载文件之多线程分块下载文件 Python中的ftplib模块用于对FTP的相关操作,常见的如下载,上传等.使用python从FTP下载较大的文件时,往往比较耗时,如何提高从 ...

  3. JavaScript正则表达式的坑很深

    Javascript的正则表达式,不能不说方便,简简单单“//”就可以声明一个RegExp对象,配合编辑器的颜色渲染,实在让人舒心.但过于方便的东西,必然也会有一些瑕疵需要我们去注意. 首先要说的是使 ...

  4. Linux操作系统学习_操作系统是如何工作的

    实验五:Linux操作系统是如何工作的? 学号:SA1****369 操作系统工作的基础:存储程序计算机.堆栈(函数调用堆栈)机制和中断机制 首先要整明白的一个问题是什么是存储程序计算机?其实存储程序 ...

  5. POJ 3348 Cows

    题目大意: 给你n棵树,可以用这n棵树围一个圈,然后在圈里面可以养牛,每个牛需要50平方米的空间,问最多可以养多少牛? 其实就是求一个凸包,计算凸包面积,然后除以50,然后就得到答案,直接上模板了. ...

  6. Java Concurrency (1)

    Memory that can be shared betweenthreads is called shared memory or heap memory. The term variable a ...

  7. linux下安装PHP5.5

    下载安装包后,在安装php之前必须先安装libxml2,因此可以通过下载libxml2安装包,编译安装 我通过yum -y install libxml2 libxml2-devel(不安装这个的话, ...

  8. Html中DIV成为超级链接,解决在360浏览器+IE9显示小手图标的兼容性!

    Html中DIV成为超级链接,解决在360浏览器+IE9显示小手图标的兼容性! <div style="cursor:pointer;" onclick="sele ...

  9. ajax的分页查询(不刷新页面)

    既然是分页查询,那么就要有张数据很多的表,可以让它进行分页显示,用普通的方法进行分页查询必然是要刷新页面的,这里要实现不刷新页面进行分页显示数据,就要用到ajax方式.进行编写代码 (1)先写个显示数 ...

  10. C#简单验证并限制登录次数小示例

    描述:提示用户输入用户名,密码,与数据库中的数据匹配,如果正确则提示登陆成功,否则,提示登陆失败 错误次数超过三次,提示登陆次数过多,禁止登陆 数据表示例: //数据库中ErrorTimes的次数增加 ...