lufei's Studio.

lufei's Studio.

纸上得来终觉浅,绝知此事要躬行。

iOS 关于相机的所有
相机的工作原理轻轻一按,你的相机就把光子转换为了比特,于是一张相片就保存到了你的 iPhone 里,像这样的神奇能力是如何实现的呢? 让我们假设一下你身处室外,环顾四周。三亿里之外,太阳无时无刻不在发射光子。它们需要花上 8 分钟之久才能到达我们舒适的星球。有一些光子撞击到你周围的物体,并反射到你眼睛的视网膜上,这会使你的大脑以这些物体为基准,创建一副图像,我们将其称之为视觉。 摄影要做的就是捕获这幅图像。摄影是在 200 年前被发明的,但在此之前的好几千年里,人类已经通过绘画的方式来捕捉他们所看到的东西了。 我们中的很多人其实每天都相机不离身:当今智能手机已经是最常用的相机之一了。在数...
iOS OpenCV 初体验
前言出于兴趣,开始学习 OpenCV (其实是领导安排QAQ,需要实现一个小需求),正好好久没更新博客,那就边写边学吧~ 过程安装的部分就跳过了,手动导入,或者 pod 导入,都可以,有一点要说的是目前来说,因为 OpenCV 的语言是 C++,所以不可避免的你需要一个支持和 C++ 混编的环境,如果你的项目的主要语言是 Swift,那么比较好的选择就是使用 OC 作为媒介来与 C++ 交互。 具体地,你需要创建一个 .mm 文件,在这个文件里面编写 OpenCV 相关代码,然后通过桥接文件暴露给 Swift 使用,大概是这样的过程。 当然 OC 里的 UIImage 和 OpenCV ...
2022年终小总结
转眼,2022年就过去了,时间过得太快,总让人猝不及防,甚至还来不及怀念它,新的生活就不管不顾地朝我撞来,根本不给我好好总结的机会,幸好,在临放假的最后一天,我想我也许有机会可以做个小小的总结了,可能这样,才能更好的迎接新生活吧。 这一年,生活上,工作上,有收获,有失去,目前来说,我也不确定,是好还是坏,只能说,只要是我的经历,我都会以我自己最大的勇气去接受它们。 工作中我终于把 flutter 使用到了生产项目中,也算对我之前的学习的检验,结果还是令我满意的,起码很好的完成了公司的开发任务,也基本上没有出现什么解决不了的问题,并且还对加解密,数据库等以前接触不多的技术,有了新的学习,2...
开车tips(持续更新中)
开车过程中需要的问题小结: 前进时,碰到障碍物,哪边碰到,就往哪边打死,然后倒档后退,这是远离障碍物的最好办法,千万不要乱调方向前进或后退,如果脑袋晕晕的,就挂 p 档,下车,仔细观察,再做判断。 后退时,碰道障碍物,哪边碰到,就往相反方向打死,然后挂前进档。 修正车身位置时,一般情况下,都是哪边大往哪边微调方向盘。 如果不小心发生事故,第一时间拍照,报警,有保险报保险。 出库遇到前方,左方,右方都有障碍物的时候,如果你要往左出库,那就把方向盘向右打一圈,出库,等到车身b柱出库的时候,再向左打死,快碰到前方障碍物的时候,回正方向,后退,再向左打死,直到出库成功。 转弯的时候一...
iOS 一键抠图
前言iOS16 推出的一键抠图功能,还是挺有趣的,我猜想它可能是通过 Vision 实现的(毕竟 Vision 在最新的开发者大会上也介绍了新的更新),于是想试试看我能不能找到抠图的办法。 实现具体的思路其实就是借助 Vision 帮助我找到图片中的热力图,然后检测出热力图中显著区域的边缘,并把得到的结果转化为图片上的坐标,然后进行抠图 得到热力图1234567891011121314UIImage *originImage = [UIImage imageNamed:@"test.jpg"];CIImage *ciOriginImg = [CII...
iOS OCR
前言想研究一下 apple 自带的 OCR 接口,查了点资料后,感觉效果还挺不错的~ 实现12345678910111213141516171819202122232425262728import Visionfunc processImage() { guard let cgImage = UIImage(named: "snapshot")?.cgImage else { return } let requestHandler = VNImageRequestHandler(cgImage: cgIma...
iOS home screen quick action
前言关于 iOS 的 home screen quick action,想尝试一下,于是在翻阅了一些资料后,简单实现了一下 实现核心方法是 application(_:performActionFor:completionHandler:) 参考代码 12345678910func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) { ...
flutter_boost 原理浅析
前言因为工作需要,我开始在原生应用中引入 flutter 来实现一些通用的功能或者模块,但是官方文档提供的办法,使用起来,还是稍微有些麻烦的,幸好,我发现了一个叫 flutter_boost 的框架,帮助我打通了原生和 flutter,实现了一套统一的页面管理方案。 准确地说,flutter boost 是在 Native / Flutter 混合栈开发模式下,一套标准的使用流程,就算以后不想使用 flutter boost ,了解一下它的工作原理,也是很有必要的。 首先因为我对 android 的原生开发也不算很了解,所以我的解释以 iOS 为主,但是其实从容器的角度来抽象的话,原理是...
知识小集
这里记录一些单个小知识,当备忘录用了,会持续更新,嘻嘻嘻。 持续交付的神器,fastlane真是太方便好用了,一个gym选项就满足了我的所有需求,苦笑~~~ Postman好人性化啊,关于multipart/form-data和application/x-www-form-urlencoded的小区别~~~ PHImageManager的requestImageData有一个巨坑(我没找到比较好的办法),就是无论如何都会阻塞主线程一会儿,但是只要在当前线程sleep任意时间,就没事了,相当硬核,或者直接使用requestImage这个api,速度快,PHImageRequest...
把 Flutter module 引入原生应用
前言最近在尝试用模块化的方式,在原生应用引入 flutter module,虽然这是一种比较不错的过渡方式,但其实有很多坑的。 通用方法使用用 flutter 源码和原生项目一起编译,iOS 需要借用 Cocoapods 来做依赖管理。 引入 android除了通用方法,还可以打包成 aar,引入项目。 Integrate a Flutter module into your Android project 引入 iOS除了通用方法,在 iOS 上还可以打包成 framework 来引入项目。 Integrate a Flutter module into your iOS projec...
avatar
路小飞
海内存知己,天涯若比邻!