图片处理

图片处理

1, GPUImagePicture

从名称就可以知道GPUImagePicture是GPUImage框架中处理与图片相关的类,它的主要作用是将UIImage或CGImage转化为纹理对象。GPUImagePicture继承自GPUImageOutput,从而可以知道它能够作为输出,由于它没有实现GPUImageInput协议,不能处理输入。因此,常常作为响应链源。

属性介绍:

pixelSizeOfImage 图像的像素大小。
hasProcessedImage 图像是否已处理。
imageUpdateSemaphore 图像处理的GCD信号量。

初始化方法:

- (id)initWithURL:(NSURL *)url
使用指定url的图片来初始化GPUImagePicture

- (id)initWithImage:(UIImage *)newImageSource
使用指定的UIImage对象来初始化GPUImagePicture

- (id)initWithCGImage:(CGImageRef)newImageSource
使用指定的CGImageRef对象来初始化GPUImagePicture

- (id)initWithImage:(UIImage *)newImageSource smoothlyScaleOutput:(BOOL)smoothlyScaleOutput
使用指定的UIImage对象来初始化GPUImagePicture,是否按比例调整输入图像的尺寸

操作API

- (void)processImage;
进行图像处理实际操作。
- (CGSize)outputImageSize;
输出image的大小

- (BOOL)processImageWithCompletionHandler:(void (^)(void))completion
进行图像处理实际的操作,completion为当处理结束执行的操作。

GPUImageView:UIView

从名称就可以知道GPUImageView是GPUImage框架中显示图片相关的类。GPUImageView实现了GPUImageInput协议,从而可以知道它能够接受GPUImageFramebuffer的输入。因此,常常作为响应链的终端节点,用于显示处理后的帧缓存。

初始化:

- (id)initWithFrame:(CGRect)frame;
-(id)initWithCoder:(NSCoder *)coder;

方法列表:

// 设置背景颜色
- (void)setBackgroundColorRed:(GLfloat)redComponent green:(GLfloat)greenComponent blue:(GLfloat)blueComponent alpha:(GLfloat)alphaComponent;

// 该方法未实现
- (void)setCurrentlyReceivingMonochromeInput:(BOOL)newValue;

属性:

GPUImageFillModeType fillMode图像的填充模式。
sizeInPixels 像素区域大小。
enabled  可交互

GPUImageUIElement UI渲染类

与GPUImagePicture类似可以作为响应链源。与GPUImagePicture不同的是,它的数据不是来自图片,而是来自于UIView或CALayer的渲染结果,类似于对UIView或CALayer截图。GPUImageUIElement继承自GPUImageOutput,从而可以知道它能够作为输出,由于它没有实现GPUImageInput协议,不能处理输入

初始化

- (id)initWithView:(UIView *)inputView;
- (id)initWithLayer:(CALayer *)inputLayer;

其他方法:

// 获取像素大小
- (CGSize)layerSizeInPixels;
// 更新方法
- (void)update;
// 使用当前时间的更新方法
- (void)updateUsingCurrentTime;
// 带时间的更新方法
- (void)updateWithTimestamp:(CMTime)frameTime;

例子: 这个后面用到会补充

   GPUImageView *gpImage = [[GPUImageView alloc]initWithFrame: CGRectMake(0, 0, 300, 300)];
    self.view = gpImage;
    gpImage.backgroundColor =[UIColor grayColor];
    GPUImageUIElement *element = [[GPUImageUIElement alloc] initWithView:gpImage];
    GPUImageWhiteBalanceFilter *filter = [[GPUImageWhiteBalanceFilter alloc] init];
    [element addTarget:filter];
    [filter addTarget:gpImage];
    [filter useNextFrameForImageCapture];
    [element update];  GPUImageView *gpImage = [[GPUImageView alloc]initWithFrame: CGRectMake(0, 0, 300, 300)];
    self.view = gpImage;
    gpImage.backgroundColor =[UIColor grayColor];
    GPUImageUIElement *element = [[GPUImageUIElement alloc] initWithView:gpImage];
    GPUImageWhiteBalanceFilter *filter = [[GPUImageWhiteBalanceFilter alloc] init];
    [element addTarget:filter];
    [filter addTarget:gpImage];
    [filter useNextFrameForImageCapture];
    [element update];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 回顾 解析(一)解析(二)解析(三)这次介绍的GPUImageContext、GPUImageFramebuffe...
    落影loyinglin阅读 8,762评论 9 28
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,283评论 4 61
  • 前言现在很多的APP当中选择图片都会带有图片处理效果,一些类似于美图,PS的功能,其实在iOS中系统内部也有这样一...
    清溪丷阅读 6,994评论 3 42
  • 原文地址: Essential image optimization 1.每个人都应当压缩图片 在Mac下可以使用...
    JamesSawyer阅读 463评论 0 0
  • 现在的我越来越现实,任重道远,时间太宝贵,断舍离,才能精!~物品如此,事情如此,人,亦如此! 跟人交往,与人说话,...
    蝶恋谷谷主阅读 188评论 0 0