关于制作GPUImage相机app的经验总结(一)

  早在大二上学期初,就有独立制作一款摄影类app的打算,但是那是时间不多能力不足也就搁浅了。后来中途接触了类似于HUJI Poly Filmborn等优秀摄影类app的时候心里那头小鹿又开始乱撞,于是便开始了翻资料码代码的生活,以下是我运用GPUImage框架制作一款相机app(暂时还未上架)的过程遇到过的坑,希望对你有所帮助。


一、关于GPUImage

官方描述:The GPUImage framework is a BSD-licensed iOS library that lets you apply GPU-accelerated filters and other effects to images, live camera video, and movies. In comparison to Core Image (part of iOS 5.0), GPUImage allows you to write your own custom filters, supports deployment to iOS 4.0, and has a simpler interface. However, it currently lacks some of the more advanced features of Core Image, such as facial detection.    GPUImage是使用GPU处理图像的、他可以对图片、实时画面、视频进行处理。他允许你自定义滤镜、支持iOS4.0。然而,目前缺乏核心形象的一些更高级的功能,比如面部检测。

GPUImage框架能排入ios框架排行榜的前十,是名副其实的ios老牌框架,由于目前的直播以及美颜类相机app的大火,GPUImage框架也是制作这些app时的不二之选

二、Q&A(问题与解决办法)

Q1:linker command failed with exit code 1 (use -v to see invocation)问题的解决办法

A1:cocopods导入后记得关闭整个项目然后从.xcworkspace文件进入


点击此文件进入


Q2:制作模拟相机界面时如何隐去status bar让主界面全屏显示

A2: info.plist->Status bar is initially hidden-YES;View controller-based status bar appearance-NO;


Status bar is initially hidden-YES



View controller-based status bar appearance-NO



Q3:错误提示Failed to read file attributes for "/Users/zhangyunzhu/Downloads/XRWaterfallLayout-master/XRWaterfallLayoutDemo/XRWaterFallLayoutDemo/Assets.xcassets"

A3:删除Assets.xcassets里面变红的图片文件



Q4:image.JPG找不到警告

A4: 由于大多数的图片素材都都来源于网络,图片格式结尾层次不齐如.jpg .JPG .svg .png等等,所以——注意大小写  注意大小写 注意大小写 重要的事情说三遍,哦对了,还有间隔符也要看一下,能删则删代码里面imageNamed看得出区别。


Q5:在从github上导入项目时候显示如图错误(很常见)


常见错误

A5:由于苹果官方的限制每周提供给开发者的Bundle Identifier有限,建议在创建好新的工程并且顺利运行之后保存一下BI码供其他项目使用。

Q6:The app's Info.plist must contain an NSPhotoLibraryAddUsageDescription key with a string value explaining to the user how the app uses this data.问题

A6:info.plist-Photo Library Additions Usage Description-想访问图库


info.plist

Q7:关于相机app拍摄后实际生成图片的方向和拍摄时的的方向不一致的问题

A7:实际上iOS手机竖着拍出的照片与横着拍出的照片对于拍摄者来说是一样的,只不过竖着拍出的照片被添加了一个顺时针旋转90°的拍照方向,所以显示的时候,就变成了上下边窄左右边宽的状态,其实也就是横着拍的照片顺时针旋转90°而成的

比如这样:


拍摄时所呈现的图片方向
保存在相册时的图片方向

这里参考文章:https://www.cnblogs.com/gaoxiaoniu/p/5329834.html

- (UIImage *)normalizedImage {

    if(self.imageOrientation == UIImageOrientationUp)return self;


    UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale);

    [self drawInRect:(CGRect){0,0, self.size}];

    UIImage *normalizedImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return normalizedImage;

}

代码大致的意思是获取所拍摄下来的照片的方位,如果方位不是UIImageOrientationUp,那么则将它重新绘制在画板上,此时drawInRect会和系统图库一样将他。

这里多插一句,ios相机拍照时原始方向是home键向右的方向而并不是平时刷微信的home键朝下的方向。


方向参数图

但是,这个方法可能会有画质上的损失这里有个更好的方法:

减小画质损失方法

来源:http://blog.csdn.net/iphone5solo/article/details/49623261

CGSize size  = {390, 430}; //新手注意:CGSize是一个结构体类型,不是对象,所以变量前不加'*'号;

    if([[UIScreen mainScreen] scale] == 2.0){      // @2x

        UIGraphicsBeginImageContextWithOptions(size, NO, 2.0);

    }else if([[UIScreen mainScreen] scale] == 3.0){ // @3x ( iPhone 6plus 、iPhone 6s plus)

        UIGraphicsBeginImageContextWithOptions(size, NO, 3.0);

    }else{

        UIGraphicsBeginImageContext(size);

    }

    // 绘制改变大小的图片

    [imager drawInRect:CGRectMake(100, 0, size.width, size.height)];

    // 从当前context中创建一个改变大小后的图片

    UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();

    // 使当前的context出堆栈

    UIGraphicsEndImageContext();

    // 返回新的改变大小后的图片

    imager = scaledImage;

    //处理按钮点击事件

        [self.testbtn addTarget:self action:@selector(TouchDown)forControlEvents: UIControlEventTouchDownInside]; 

    //处理按钮松开状态

        [self.testbtn addTarget:self action:@selector(TouchUp)forControlEvents: UIControlEventTouchUpInside | UIControlEventTouchUpOutside]; 

But: 我在使用这个方法试图矫正所拍摄照片的时候失败了,可能的原因是我用GPUImageFilterGroup为其添加了一层滤镜,然后他的imageOrientation被初始化了,NSLog大法显示无论我横着拍还是正着拍都是UIImageOrientationRight,这个问题我还没有深究,如果有知道的小伙伴可以私信我简书。

三、分享一些省时省力的小Tips

1.一个快速图标生成的网站,以后图标适配不用再苦逼的用ps改分辨率了      http://www.atool.org/ios_logo.php

2.3d touch实现快拍功能:


1.在info里添加这一项

// 2.在appdelegate.m里写处理点击3D touch 方法的功能实现

-(void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler {

    if ([shortcutItem.type isEqualToString:@"Camera"]) {

        NSLog(@"开拍");

    }

实现效果:

注意:如果你在为系统“分享”犯愁的话,我悄悄的告诉你,这个是上架后系统自带的系统分享功能(心在滴血)

四、展望

下一篇可能(可能,我说的是可能)会介绍一些关于颜色查找表lookup快速制作滤镜、GPUImage2(Swift)以及项目demo和FILMMY相机的真容啦(≖‿≖)✧

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354

推荐阅读更多精彩内容

  • 1、禁止手机睡眠[UIApplication sharedApplication].idleTimerDisabl...
    DingGa阅读 1,117评论 1 6
  • 哪些人适合做中国式众筹? 中国式众筹作为一种创新型的组织形式和商业模式,其核心是一套方法论体系,具有很强的普适性。...
    robot_liu阅读 328评论 0 0
  • 对团队而言是要先求同,在大目标一致的基础上,允许每个人有自己的特点。 对客户而言是先存异,先挖掘每个人不同的需...
    禾呈人桀阅读 455评论 1 2