多媒体之摄像头、相册-阿里云开发者社区

开发者社区> 社会主义> 正文

多媒体之摄像头、相册

简介:
+关注继续查看

网络这块要学的东西还有好多,比如套接字等,目前只是了解了AFNetworking。掌握了它对网络这块基本功能都可以实现,问题不大,等有机会再深入学习网络这块。目前先把IOS的整体模块都了解学习遍,针对特别的一些模块随后仔细深入理解。现在来看下多媒体这块。


//
//  ViewController.m
//  Photo
//
//  Created by City--Online on 15/5/4.
//  Copyright (c) 2015年 CYW. All rights reserved.
//
 
#import "ViewController.h"
#import <MobileCoreServices/MobileCoreServices.h>
 
@interface ViewController ()<UIImagePickerControllerDelegate,UINavigationControllerDelegate,UIActionSheetDelegate>
@property(nonatomic,strong)UIImageView *ImgView;
@end
 
@implementation ViewController
 
- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationItem.title=@"我的相册";
    self.navigationItem.rightBarButtonItem=[[UIBarButtonItem alloc]initWithTitle:@"拍照" style:UIBarButtonItemStyleDone target:self action:@selector(pickerImg)];
    self.navigationController.navigationBar.translucent=NO;
    self.view.backgroundColor=[UIColor redColor];
     
    self.ImgView=[[UIImageView alloc]initWithFrame:self.view.frame];
    self.ImgView.backgroundColor=[UIColor blueColor];
    [self.view addSubview:self.ImgView];
    [self availableMediaTypes];
    [self availableCaptureModes];
}
 
-(void)pickerImg
{
    UIImagePickerController *ImgPick=[[UIImagePickerController alloc]init];
    //    typedef NS_ENUM(NSInteger, UIImagePickerControllerSourceType) {
    //        UIImagePickerControllerSourceTypePhotoLibrary, 图片列表
    //        UIImagePickerControllerSourceTypeCamera,       摄像头
    //        UIImagePickerControllerSourceTypeSavedPhotosAlbum 相机相册
    //    };
    
    ImgPick.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;
    ImgPick.delegate=self;
    //设置当拍照完或在相册选完照片后,是否跳到编辑模式进行图片剪裁。只有当showsCameraControls属性为true时才有效果
    ImgPick.editing=YES;
    //设置拍照时的下方的工具栏是否显示,如果需要自定义拍摄界面,则可把该工具栏隐藏
//    ImgPick.showsCameraControls  = YES;
    //设置使用后置摄像头,可以使用前置摄像头
//    ImgPick.cameraDevice = UIImagePickerControllerCameraDeviceRear;
    //设置闪光灯模式
    /*
     typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraFlashMode) {
     UIImagePickerControllerCameraFlashModeOff  = -1,
     UIImagePickerControllerCameraFlashModeAuto = 0,
     UIImagePickerControllerCameraFlashModeOn   = 1
     };
     */
//    ImgPick.cameraFlashMode = UIImagePickerControllerCameraFlashModeAuto;
     
    //设置相机支持的类型,拍照和录像
    ImgPick.mediaTypes = @[(NSString*)kUTTypeImage,(NSString*)kUTTypeMovie];
    //叠加View
//    ImgPick.cameraOverlayView=self.view;
    //旋转
//    ImgPick.cameraViewTransform = CGAffineTransformMakeScale(0.5, 0.5);
    //最长时间支持
//    ImgPick.videoMaximumDuration=10;
//    枚举 视频质量
//    ImgPick.videoQuality=UIImagePickerControllerQualityTypeHigh;
     
//    // 可以通过判断cameraCaptureMode来进行拍照或录像 前提是sourceType=UIImagePickerControllerSourceTypeCamera 上面注释的属性也是
//    if (ImgPick.cameraCaptureMode==UIImagePickerControllerCameraCaptureModePhoto) {
//        [ImgPick takePicture];
//    }
//    else
//    {
//        [ImgPick startVideoCapture];
//        sleep(10);
//        [ImgPick stopVideoCapture];
//    }
     
    [self presentViewController:ImgPick animated:YES completion:nil];
}
 
//当选择一张图片后进入这里
-(void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
 
{
     
    NSString *type = [info objectForKey:UIImagePickerControllerMediaType];
    //当选择的类型是图片
    if ([type isEqualToString:@"public.image"])
    {
        //先把图片转成NSData
        UIImage* image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
        NSData *data;
        if (UIImagePNGRepresentation(image) == nil)
        {
            data = UIImageJPEGRepresentation(image, 1.0);
        }
        else
        {
            data = UIImagePNGRepresentation(image);
        }
         
        //图片保存的路径
        //这里将图片放在沙盒的documents文件夹中
        NSString * DocumentsPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
        //文件管理器
        NSFileManager *fileManager = [NSFileManager defaultManager];
        //把刚刚图片转换的data对象拷贝至沙盒中 并保存为image.png
        [fileManager createDirectoryAtPath:DocumentsPath withIntermediateDirectories:YES attributes:nil error:nil];
        [fileManager createFileAtPath:[DocumentsPath stringByAppendingString:@"/image.png"] contents:data attributes:nil];
         
        //得到选择后沙盒中图片的完整路径
       NSString *filePath = [[NSString alloc]initWithFormat:@"%@%@",DocumentsPath,  @"/image.png"];
        NSLog(@"%@",filePath);
        //关闭相册界面
        [picker dismissViewControllerAnimated:YES completion:nil];
         
        //创建一个选择后图片的小图标放在下方
        //类似微薄选择图后的效果
        UIImageView *smallimage = [[UIImageView alloc] initWithFrame:
                                    CGRectMake(50, 120, 100, 100)] ;
         
        smallimage.image = image;
        //加在视图中
        [self.view addSubview:smallimage];
         
    }
     
}
 
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
    NSLog(@"您取消了选择图片");
    [picker dismissViewControllerAnimated:YES completion:nil];
}
 
//以下这些方法以后可以用到
 
// 相册是否可用
- (BOOL) isPhotoLibraryAvailable{
    return [UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypePhotoLibrary];
}
//是否支持摄像头
-(BOOL)isCameraAvailable
{
    return [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];
}
//是否支持前后摄像头
-(BOOL)isFontCameraAvailable
{
    //    typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraDevice) {
    //        UIImagePickerControllerCameraDeviceRear,  后置摄像头
    //        UIImagePickerControllerCameraDeviceFront  前置摄像头
    //    };
     
    return [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront];
}
//是否支持闪光灯、手电筒
-(BOOL)isFlashAvailable
{
    return [UIImagePickerController isFlashAvailableForCameraDevice:UIImagePickerControllerCameraDeviceFront];
}
//支持的媒体类型
-(void)availableMediaTypes
{
    NSArray *array=[UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeSavedPhotosAlbum];
    for (NSString* mediaType in array) {
//        (NSString *)kUTTypeImage]) 在MobileCoreServices框架,需要引入并添加#import <MobileCoreServices/MobileCoreServices.h>
        if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {
            //支持摄像
//            public.image
            NSLog(@"%@",mediaType);
            NSLog(@"支持摄像");
            break;
        }
    }
    NSLog(@"%ld",array.count);
    for (int i=0; i<array.count; i++) {
        NSLog(@"%@",[array objectAtIndex:i]);
    }
}
-(void)availableCaptureModes
{
    //typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraCaptureMode) {
    //    UIImagePickerControllerCameraCaptureModePhoto,
    //    UIImagePickerControllerCameraCaptureModeVideo
    //};
    //支持的相机模式 拍照还是摄像
    NSArray *array=[UIImagePickerController availableCaptureModesForCameraDevice:UIImagePickerControllerCameraDeviceFront];
    NSLog(@"%ld",array.count);
    for (int i=0; i<array.count; i++) {
        NSLog(@"%@",[array objectAtIndex:i]);
    }
     
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
 
@end

 


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
java结合android和ios的三端非对称接口加密讲解
  算法:有rsa及aes算法   Java端处理方式:   入参处理方式   1、参数通过request.getParameter获取的话,可以通过自己定义一个filter来进行处理。   定义两个类,分别继承HttpServletRequestWrapper及Filter,将该filter配置到web.xml里面,在其他filter前面,以免影响程序获取参数的调用   public class SafeTextRequestWrapper extends HttpServletRequestWrapper {   public SafeTextRequestWrapper(H
9 0
推荐一个用于程序员写代码时播放背景音乐的网站:听雨网
推荐一个用于程序员写代码时播放背景音乐的网站:听雨网
4 0
[iOS研习记]——聊聊野指针与僵尸对象定位
在iOS项目开发中,或多或少的我们都会遇到一些Crash的情况,大部分Crash抛出的异常都是NSException层的,这类异常是OC层代码问题造成的,通常堆栈信息和异常的提示信息都非常明确,可以直接定位到出问题的代码,从而使这类问题的解决并不困难。可以引起Crash的异常除了NSException外,还有Unix层和Mach层的异常。
3 0
Unity 基础 之 PlayerPrefs数据存储
PlayerPrefs 游戏存档俗称玩家偏好。 工作原理非常简单,以键值对的形式将数据保存在文件中,然后程序可以根据这个名称取出上次保存的数值。
5 0
Fiddler 抓包配置iphone为例
Fiddler 抓包配置iphone为例
3 0
使用Cordova将您的前端JavaScript应用打包成手机原生应用
使用Cordova将您的前端JavaScript应用打包成手机原生应用
4 0
Hyperledger Fabric on SAP Cloud Platform(SAP云平台上的超级账本简介)
Hyperledger Fabric on SAP Cloud Platform(SAP云平台上的超级账本简介)
4 0
工厂模式
工厂设计模式,可能是我们开发过程中无形之中使用的最多的设计模式。工厂设计模式包括简单工厂(Simple Factory)、方法工厂(Method Factory)、抽象工厂(Abstract Factory),其中简单工厂设计模式并包含在GOF23种设计模式之中,但是其使用也十分广泛;这三种设计模式之间存在一定的关系,层层递进;但是三种工厂设计模式各自有各自适用的场景,在实际开发中选择设计模式应该深思熟虑。
5 0
HTML5应用 + Cordova = 平台相关的混合应用
HTML5应用 + Cordova = 平台相关的混合应用
6 0
手机秒变投篮机,还能模拟投篮真实手感,腾讯微视技术「家底」到底有多厚?
小小的 AR 投篮机背后包含着哪些技术?我们和腾讯微视技术团队聊了聊。
7 0
+关注
社会主义
从.Net到iOS,在撸的道路上越走越远,工作之余经营着博客园http://www.cnblogs.com/5ishare,欢迎小伙伴(妹子更好)一起交流,谈谈人生理想。作为经常从网上索取免费资料的一员,要有回报回报的思想,也让更多的人少走弯路.
237
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载