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/ 接下来,我们应 ...
随机推荐
- ASP.NET MVC3开发 - CodeFisrt数据库篇之M层验证之调用远程方法(Remote)验证
本文讲述在作者在使用.net mvc3进行开发的时候用到的两种调用远程验证的方法,第一种方法比较傻瓜,第二种方法方便好用,调用远程验证是个比较常见的验证方法,比如注册用户时的用户名唯一性验证. 作者原 ...
- No CurrentSessionContext configured 异常解决
Exception in thread "main" org.hibernate.HibernateException: No CurrentSessionContext conf ...
- MySql主从配置实践及其优势浅谈
MySql主从配置实践及其优势浅谈 1.增加两个MySQL,我将C:\xampp\mysql下的MYSQL复制了一份,放到D:\Mysql2\Mysql5.1 修改my.ini(linux下应该是my ...
- jQuery的MP3、视频播放器jPlayer
jplayer是一个纯代码的html5音乐.视频播放器. 支持单个.多个音乐或视频播放,支持各种主流的媒体文件. 使用方法: 1.提供json参数 [ { "title": &qu ...
- Vim 7.4.1952 with Python/Ruby/Lua/Perl/C Syntax built for Ubuntu 16.04 x86_64
The default Vim provided by Ubuntu 16.04 even did not have Python support. That's insane. I say, wha ...
- JSTL(JSP Standard Tag Library ,JSP标准标签库)
JSTL标签之核心标签 JSTL(JSP Standard Tag Library ,JSP标准标签库)是一个实现 Web应用程序中常见的通用功能的定制标记库集,这些功能包括迭代和条件判断.数据管 ...
- 如何制作一个类似Tiny Wings的游戏 Cocos2d-x 2.1.4
在第一篇<如何使用CCRenderTexture创建动态纹理>基础上,增加创建动态山丘,原文<How To Create A Game Like Tiny Wings with Co ...
- ADO.NET—两种连接模式
一.ADO.NET简介 ADO.NET的名称起源于ADO(ActiveX Data Objects),这是一个广泛的类组,用于在以往的Microsoft技术中访问数据.用来访问数据库,.NET环境下首 ...
- Python基础1-变量、运算符、表达式
一.Python的安装 1.下载python安装包https://www.python.org/ 2.选择对应的Python版本(Windows下) 3.装完之后打开电脑的cmd,验证一下安装是否成功 ...
- 话说Fetch这个API
前言: 最近在研究React这个框架,成功的成为了一名新的入坑着.用过React的都知道React的强大主要是在于它的生态的 强大,React说的再大不过也就是一个UI框架罢了.不过我们学习react ...