6

我正在尝试制作一个相机/照片应用程序,它将在图像上添加过滤器。我听说过 Brad Larson 的 GPUImage,所以我下载了它并尝试操作它以更熟悉代码。

现在,我在 Xcode 中创建了一个新项目并将其添加到我的框架中,但我不知道如何在新项目中使用它。

如何在我的新项目中正确使用 GPUImage?

4

4 回答 4

16

我不知道我怎么能比我在 GitHub 项目的第一页和“将框架添加到您的 iOS 项目”部分下的 README.md 中的分步说明更清楚:

一旦您获得了该框架的最新源代码,就可以非常简单地将其添加到您的应用程序中。首先将 GPUImage.xcodeproj 文件拖到应用程序的 Xcode 项目中,以将框架嵌入到项目中。接下来,转到应用程序的目标并将 GPUImage 添加为目标依赖项。最后,您需要将 libGPUImage.a 库从 GPUImage 框架的 Products 文件夹拖到应用程序目标中的 Link Binary With Libraries 构建阶段。

GPUImage 需要一些其他框架才能链接到您的应用程序中,因此您需要在应用程序目标中添加以下内容作为链接库:

  • 核心媒体
  • 核心视频
  • OpenGLES
  • AV基金会
  • 石英芯

您还需要找到框架标头,因此在项目的构建设置中,将标头搜索路径设置为从应用程序到 GPUImage 源目录中 framework/ 子目录的相对路径。使此标头搜索路径递归。

要在您的应用程序中使用 GPUImage 类,只需使用以下内容包含核心框架标头:

#import "GPUImage.h"

注意:如果您在尝试使用 Interface Builder 构建界面时遇到错误“Unknown class GPUImageView in Interface Builder”等,您可能需要在项目的构建设置中将 -ObjC 添加到您的 Other Linker Flags 中。

此外,如果您需要将其部署到 iOS 4.x,当前版本的 Xcode (4.3) 似乎要求您在最终应用程序中弱链接 Core Video 框架,否则您会看到崩溃并显示消息“未找到符号” : _CVOpenGLESTextureCacheCreate" 当您创建存档以上传到 App Store 或进行临时分发时。为此,请转到项目的 Build Phases 选项卡,展开 Link Binary With Libraries 组,然后在列表中找到 CoreVideo.framework。将列表最右侧的设置从必需更改为可选。

此外,这是一个支持 ARC 的框架,因此如果您想在针对 iOS 4.x 的手动引用计数应用程序中使用它,您还需要将 -fobjc-arc 添加到您的其他链接器标志中。

要查看实际情况,请查看我随框架提供的许多示例应用程序中的任何一个。

于 2012-09-28T13:31:54.150 回答
5

请阅读此页面http://www.sunsetlakesoftware.com/2012/02/12/introducing-gpuimage-framework和此:https ://github.com/BradLarson/GPUImage

注意:简单来说,你可以将framework/source文件夹中的所有源代码文件复制到你的项目中,并导入GPUImage.h来使用。

问候!

于 2012-09-27T01:57:35.857 回答
3

将 GPUImage 集成到项目中的最简单的方法可能是通过。尽管 Brad 实际上并未维护 GPUImage CocoaPods 存储库,但它的维护非常定期,它使集成变得轻而易举。

>去实现它(梦想);去得到它(东西

于 2015-08-20T05:43:08.900 回答
2

以下是如何在Xcode for iOS的Swift 5中使用 Visual Directions 执行此操作:

在你开始之前有两件事。

  • 你应该在你的项目的副本/副本上开始这个过程,直到你得到它正确(我花了几次尝试),或者甚至从一个新项目开始。如果出现问题,您希望保持原始项目完好无损
  • 如果您打开了一个项目,其中包含您尝试复制的 GPUImage,请确保先将其关闭。你会得到一个错误,说有一个项目已经打开

在此处输入图像描述

1- 转到 GPUImage gitHub 页面

2-在右上角,单击绿色Code按钮,然后单击Download Zip

在此处输入图像描述

3- 在您当前的 Xcode 项目(您要使用 GPUImage 的项目)中单击蓝色项目图标下方的第一个文件夹

在此处输入图像描述

4-之后转到Xcode的顶部并单击File>Add Files to "yourProject"

在此处输入图像描述

5-当新窗口出现时,转到Downloads(或您在第二步中下载 GPUImage 的任何位置)> GPUImage3-master> framework>GPUImage.xcodeproj然后单击Add。确保Copy Items if NeededCreate groups接受检查很重要。

在此处输入图像描述

6-您现在将GPUImage.xcodeproj在第 3 步中的同一文件夹下看到您的 Xcode 项目(无需对其进行任何操作)

在此处输入图像描述

7-单击您的项目的blue project icon>Build Phases并且中间/中心窗格应该打开TARGETS。确保不要单击GPUImage.xcodeproj,即错误文件夹

在此处输入图像描述

8-仍在构建阶段下单击Dependencies,然后单击plus sign

在此处输入图像描述

9-当弹出窗口出现时选择GPUImage_iOS然后选择Add(确保选择iOS版本而不是 macOS 版本)

在此处输入图像描述

10-您现在将看到下面的GPUImage_iOS依赖项Dependencies(此处无需执行任何操作)

在此处输入图像描述

11 - 现在仍然在Build Phases单击Link Binary库,然后单击plus sign

在此处输入图像描述

12-当弹出窗口出现在Workspace > GPUImage > selectGPUImage.framework from 'GPUImage_iOS' target ...然后按Add(确保选择iOS版本而不是 macOS 版本)

在此处输入图像描述

13-现在图书馆已链接(无需在这里做任何事情)

在此处输入图像描述

14(a)- 这很重要,如果在 Build Phases 下没有Copy Files 文件 夹,则转到 Xcode 顶部并选择Editor> Add Build Phase> Add Copy Files Build Phase。如果文件夹已经存在,我不确定如果文件夹已经存在该怎么办Copy Files 文件夹最初并不适合我,我使用步骤 14(b) 创建了它。我假设它是否已经存在,只需打开它并继续执行第 16 步

在此处输入图像描述

Add Copy Files Build Phase14(b)-如果由于某种原因变灰请执行此操作或在Build Phases左上角按plus sign,然后选择New Copy Files Phase

在此处输入图像描述

Copy Files15- 现在您将在 Build Phases 下看到一个全新的目录

在此处输入图像描述

16-如果Copy Files尚未打开,请按切换按钮将其打开,然后Destination更改ResourcesFramework

在此处输入图像描述

17- 在 下Copy Files,按plus sign,当弹出窗口出现时,如果这是一个iOS项目,在 下Products,选择顶部 GPUImage.framework并按添加。最后一步是在布拉德的指导下

添加一个新的 Copy Files 构建阶段,将其目标设置为 Frameworks,并将上层 GPUImage.framework(适用于 iOS)或下层 GPUImage.framework(适用于 Mac)添加到该阶段

在此处输入图像描述

18-现在GPUImage.framework刚刚添加到Copy Files

在此处输入图像描述

19-您的构建阶段屏幕应该如下所示

在此处输入图像描述

20-清理项目Shift+Command+K

21-在您打算使用 GPUImage 的任何文件中转到顶部并输入import GPUImage(它应该开始出现在自动完成下)然后构建您的项目。

在此处输入图像描述

22-测试GPUImage中的类和方法是否在你的项目中工作

// nothing is supposed to actually happen here, just test to see if the SmoothToonFilter() class and filterWithOperation() method are recognized without any errors
let testImage = UIImage(named:"some_image_from_your_assets")!
let toonFilter = SmoothToonFilter()
let _ = testImage.filterWithOperation(toonFilter)

在此处输入图像描述

完毕!

于 2020-07-31T23:04:49.517 回答