我的编程空间,编程开发者的网络收藏夹
学习永远不晚

iOS实现摄像头实时采集图像的方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

iOS实现摄像头实时采集图像的方法

小编给大家分享一下iOS实现摄像头实时采集图像的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

iOS实现摄像头实时采集图像的具体内容如下

新接到一个实时获取摄像头当前照片的需求,在设定的时间内需要保持摄像头处在开启状态并可以实时回调到当前的图片数据信息;

此次结合 AVCaptureDevice、AVCaptureSession、AVCaptureVideoPreviewLayer 将其与 UIView、UIImageView 和 UIImage 相结合;

Github

具体实现 code 如下:

#import <UIKit/UIKit.h>#import <CoreVideo/CoreVideo.h>#import <CoreMedia/CoreMedia.h>#import <AVFoundation/AVFoundation.h> NS_ASSUME_NONNULL_BEGIN @interface YHCameraView : UIView <AVCaptureVideoDataOutputSampleBufferDelegate> @property (nonatomic, weak) UIImageView *cameraImageView;@property (strong, nonatomic) AVCaptureDevice* device;@property (strong, nonatomic) AVCaptureSession* captureSession;@property (strong, nonatomic) AVCaptureVideoPreviewLayer* previewLayer;@property (strong, nonatomic) UIImage* cameraImage; @end NS_ASSUME_NONNULL_END
#import "YHCameraView.h" @implementation YHCameraView - (instancetype)initWithFrame:(CGRect)frame {    if (self = [super initWithFrame:frame]) {        self.backgroundColor = [UIColor lightGrayColor];        [self createUI];    }    return self;}  - (void)createUI {    NSArray* devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];    for(AVCaptureDevice *device in devices)    {        if([device position] == AVCaptureDevicePositionFront) // 前置摄像头            self.device = device;    }        AVCaptureDeviceInput* input = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:nil];    AVCaptureVideoDataOutput* output = [[AVCaptureVideoDataOutput alloc] init];    output.alwaysDiscardsLateVideoFrames = YES;     dispatch_queue_t queue;    queue = dispatch_queue_create("cameraQueue", NULL);    [output setSampleBufferDelegate:self queue:queue];     NSString* key = (NSString *) kCVPixelBufferPixelFormatTypeKey;    NSNumber* value = [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA];    NSDictionary* videoSettings = [NSDictionary dictionaryWithObject:value forKey:key];    [output setVideoSettings:videoSettings];     self.captureSession = [[AVCaptureSession alloc] init];    [self.captureSession addInput:input];    [self.captureSession addOutput:output];    [self.captureSession setSessionPreset:AVCaptureSessionPresetPhoto];     self.previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:self.captureSession];    self.previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;     // CHECK FOR YOUR APP    NSInteger screenWidth = self.frame.size.width;    NSInteger screenHeitht = self.frame.size.height;    self.previewLayer.frame = self.bounds;    self.previewLayer.orientation = AVCaptureVideoOrientationPortrait;    // CHECK FOR YOUR APP //    [self.layer insertSublayer:self.previewLayer atIndex:0];   // Comment-out to hide preview layer     [self.captureSession startRunning];} - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection{    CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);    CVPixelBufferLockBaseAddress(imageBuffer, 0);    uint8_t *baseAddress = (uint8_t *)CVPixelBufferGetBaseAddress(imageBuffer);    size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer);    size_t width = CVPixelBufferGetWidth(imageBuffer);    size_t height = CVPixelBufferGetHeight(imageBuffer);     CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();    CGContextRef newContext = CGBitmapContextCreate(baseAddress, width, height, 8, bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);    CGImageRef newImage = CGBitmapContextCreateImage(newContext);     CGContextRelease(newContext);    CGColorSpaceRelease(colorSpace);     self.cameraImage = [UIImage imageWithCGImage:newImage scale:1.0f orientation:UIImageOrientationLeftMirrored]; // UIImageOrientationDownMirrored    self.cameraImageView.image = [UIImage imageWithCGImage:newImage scale:1.0f orientation:UIImageOrientationLeftMirrored];     CGImageRelease(newImage);     CVPixelBufferUnlockBaseAddress(imageBuffer, 0);} @end

将其实例化后在需要的时候直接获取其 cameraView 的 cameraImage 即可;

#pragma mark - 快照采集/// 快照采集- (YHCameraView *)cameraView {    if (!_cameraView) {        YHCameraView *view = [[YHCameraView alloc] init];        view.frame = CGRectMake(1, 1, 1, 1);        view.cameraImageView.image = view.cameraImage;        _cameraView = view;    }    return _cameraView;} NSString *strImg = [YHCameraManager imageBase64EncodedWithImage:self.cameraView.cameraImage                                                       AndImageType:@"JPEG"]; // 获取照片信息
+ (NSString *)imageBase64EncodedWithImage:(UIImage *)img AndImageType:(NSString *)type {    NSString *callBack = nil;    if ([img isKindOfClass:[UIImage class]]) {        NSData *data = [NSData data];        if ([type isEqualToString:@"PNG"]) {            data = UIImagePNGRepresentation(img);        } else {            data = UIImageJPEGRepresentation(img, 1.0f);        }                NSString *encodedImgStr = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];                NSLog(@"YHCameraManager\nencodedImgStr: %@", encodedImgStr);        return encodedImgStr;    } else {        return callBack;    }}

以上是“iOS实现摄像头实时采集图像的方法”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

iOS实现摄像头实时采集图像的方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

iOS实现摄像头实时采集图像的方法

小编给大家分享一下iOS实现摄像头实时采集图像的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!iOS实现摄像头实时采集图像的具体内容如下新接到一个实时获取摄像
2023-06-14

iOS实现摄像头实时采集图像

本文实例为大家分享了iOS实现摄像头实时采集图像的具体代码,供大家参考,具体内容如下 新接到一个实时获取摄像头当前照片的需求,在设定的时间内需要保持摄像头处在开启状态并可以实时回调到当前的图片数据信息; 此次结合 AVCaptureDevi
2022-05-24

基于C++的摄像头图像采集及拼接程序该怎么实现

今天给大家介绍一下基于C++的摄像头图像采集及拼接程序该怎么实现。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。程序的说明实现从摄像头实时采集单帧图像,之后完成
2023-06-28

C#怎么利用AForge实现摄像头信息采集

要利用AForge实现摄像头信息采集,首先需要安装AForge.NET Framework。然后,可以按照以下步骤使用C#代码实现摄像头信息采集:引用AForge库:using AForge.Video;using AForge.Vide
C#怎么利用AForge实现摄像头信息采集
2024-03-01

使用Python实现控制摄像头的方法详解

当今,随着计算机技术的发展,摄像头已经成为了人们生活中不可或缺的一部分。而Python作为一种流行的编程语言,也可以轻松地控制和操作摄像头。本文将介绍如何使用Python中的常用库(例如OpenCV和Tkinter)来控制和操作摄像头,需要的可以参考一下
2023-03-10

Android编程实现摄像头临摹效果的方法

本文实例讲述了Android编程实现摄像头临摹效果的方法。分享给大家供大家参考,具体如下:这篇文章结合本人的开发实例,介绍如何实现摄像头临摹效果,即将摄像头拍摄的画面作为临摹的物体投射到画纸上,用户可以在画纸上继续作画,效果如图1.主要可以
2023-05-30

Python实现从网络摄像头拉流的方法分享

这篇文章主要为大家详细介绍了Python实现从网络摄像头拉流的几种方法,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下
2023-01-28

Android开发实现ImageView加载摄像头拍摄的大图功能

本文实例讲述了Android开发实现ImageView加载摄像头拍摄的大图功能。分享给大家供大家参考,具体如下:这个方法是从官方demo中摘录的,在此记录学习。权限2023-05-30

JavaScript实现图像压缩的方法

使用JavaScript和canvas压缩图像可以使用canvas的drawImage()方法将图像绘制到canvas上,然后使用toDataURL()方法将图像转换为DataURL形式,这篇文章主要介绍了JavaScript图像压缩的相关资料,需要的朋友可以参考下
2023-01-11

C++实现旋转图像的方法

这篇文章主要讲解了“C++实现旋转图像的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++实现旋转图像的方法”吧!Rotate Image 旋转图像You are given an n
2023-06-20

Android使用CircleImageView实现圆形头像的方法

有时我们在应用中会用到圆形头像,下面是利用CircleImageView实现圆形头像的演示,下面效果和代码,效果如图实现起来也比较简单,先在项目中建一个circleimageview包用来存放CircleImageView类,待会直接把Ci
2022-06-06

Android利用CircleImageView实现圆形头像的方法

CircleImageView实现圆形头像代码分享,供大家参考,具体内容如下 一、创建属性文件(attrs.xml)具体操作: 1、在项目的values文件底下创建一新的属性文件,文件名为attrs:New->XML->Values XML
2022-06-06

VB.NET中心旋转图像的实现方法

这篇文章主要讲解了“VB.NET中心旋转图像的实现方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“VB.NET中心旋转图像的实现方法”吧!我们在学习一门编程语言的时候,需要通过不断的实践去
2023-06-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录