swift 2 选择头像图片

一句话选择单个头像图片
新建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 选择头像图片的更多相关文章
- 相册选择头像或者拍照 上传头像以NSData 图片二进制格式 表单上传
一.点击头像图片 或者按钮 在相册选择照片返回img,网络上传头像要用data表单上传 (1)上传头像属性 // 图片二进制格式 表单上传 @property (nonatomic, strong) ...
- swift上传头像
很久没有写博客了,今天特地写了这个,也是一边仿照别人写的demo,注释部分都是需要的.需要的同学可以参考一下. @IBAction func headImageBtnPage(){ //上传头像 / ...
- Android中调用另一个Activity并返回结果-以模拟选择头像功能为例
场景 Android中点击按钮启动另一个Activity以及Activity之间传值: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/detail ...
- ajax实现注册并选择头像后上传
在初次接触ajax后,我们做了一个crm训练的项目,大多数小组都有注册用户这一项,但是都忽略掉了一个功能,那就是,很多网站的注册是可以上传头像的,在这里我做了一个在已有的头像数组里选择图片上传作头像的 ...
- php使用post动态选择头像和js事件动态改变头像
<html> <head> <meta http-equit="Content-type" content="text/html" ...
- jQuery滑过头像图片展示个人信息效果
这是一款经典的jQuery图片插件,同时,也可以是一款jQuery提示框插件.这款jQuery插件的功能是当你把鼠标滑过头像图片缩略图时,即可弹出头像对应用户的详细个人信息,弹出的标签虽然不大,但是还 ...
- Android选择头像
http://www.jianshu.com/p/8b3e78046c1c 注意:在Android6.0之后,使用相机拍照需要权限 在选择头像使用相机拍摄时添加以下代码即可. Acp.getInsta ...
- Android实战简易教程-第二十八枪(基于Bmob实现头像图片设置和网络上传功能!)
上一篇我们介绍了怎样由uri转换成String ,本文就用到了上篇文章的方法.以下我们介绍一下怎样设置头像后将头像图片上传到云端的方法,本文基于Bmob提供的服务. 看一下代码:(布局文件和前两篇文章 ...
- 「小程序JAVA实战」小程序头像图片上传(下)(45)
转自:https://idig8.com/2018/09/09/xiaochengxujavashizhanxiaochengxutouxiangtupianshangchuan44/ 接下来,我们应 ...
随机推荐
- CSS样式基础知识
CSS样式基础知识 CSS样式概述 CSS是Cascading Style Sheet 的缩写.译作“层叠样式表单”.是用于(增强)控制网页样式并允许将样式信息与网页内容分离的一种标记性语言. 引用位 ...
- JS左侧菜单-03
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Chrome插件i18n多语言实现
i18n(其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称.Chrome插件框架中i18n的封装API: chrome.i18n.ge ...
- solrcloud集群部署
Zookeeper安装 Zookeeper的安装和配置十分简单, 既可以配置成单机模式, 也可以配置成集群模式. 下面将分别进行介绍. 注意防火墙和selinux,关闭后进行如下配置,由于是Java写 ...
- [置顶] github 出现 Permission denied (publickey)的解决
今天写了一篇博客,想push到github上的时候出现了以下错误 Permission denied (publickey). fatal: The remote end hung up unexpe ...
- 【2013Esri全球用户大会精彩看点】ArcGIS 10.2移动产品新特性
Ø 全新的应用Explorer for ArcGIS 在2013年第四季度,Esri将发布全新的应用Explorer for ArcGIS,它将联合Collector和Operations Dashb ...
- c++课程设计之通讯录电话簿管理设计
功能 本程序是利用c++实现一个简单的电话簿管理.我是在Linux下利用g++直接编译的,完全可以将文件在VC中编译执行.源程序如有需要自行下载,点此下载,下载程序编译执行 程序执行效果如下; 1.新 ...
- 应用Git Flow—Git团队协作最佳实践
规范的Git使用 Git是一个很好的版本管理工具,不过相比于传统的版本管理工具,学习成本比较高. 实际开发中,如果团队成员比较多,开发迭代频繁,对Git的应用比较混乱,会产生很多不必要的冲突或者代码丢 ...
- 计算字符串中每种字符出现的次数[Dictionary<char,int>泛型集合用法]
有一道经典的面试题: 统计 welcome to china中每个字符出现的次数,不考虑大小写. 第一个出现在脑海里的想法是: 1. 将字字符串转换成 char数组: 2. 用 for循环遍 ...
- C#简单验证并限制登录次数小示例
描述:提示用户输入用户名,密码,与数据库中的数据匹配,如果正确则提示登陆成功,否则,提示登陆失败 错误次数超过三次,提示登陆次数过多,禁止登陆 数据表示例: //数据库中ErrorTimes的次数增加 ...