2020年12月

 title=

据 Gartner 2018 年 2 月的报告,“到 2020 年,25% 的客户服务和支持业务将在参与渠道中整合虚拟客户助理(VCA)或聊天机器人技术,而 2017 年只有不到 2%。”鉴于此,读者会发现本教程对理解开源的 Recast.AI 机器人创建平台的工作原理很有帮助。

聊天机器人,包括基于语音的以及其他技术的,已经实际使用了有一阵子了。从让用户参与谋杀解密游戏,到帮助完成房地产交易和医疗诊断,聊天机器人已经跨越了多个领域。

有许多平台可以让用户创建和部署机器人。Recast.AI(在被 SAP 收购之后现在是 SAP Conversational AI)是其中的先行者。

酷炫的界面、协作性以及它所提供的分析工具,让它成为流行的选择。

正如 Recast 官方网站说的,“它是一个创建、训练、部署和监控智能机器人的终极协作平台。”

创建一个基础的机器人

让我们来看看如何在 Recast 创建一个基础的机器人。

  1. https://cai.tools.sap 创建一个账户。注册可以使用电子邮箱或者 Github 账户。
  2. 在你登录之后,你会进入仪表板。点击右上角 “+” 新建机器人图标新建一个机器人。
  3. 在下一个界面,你会看到一系列可选的预定义技能。暂时选择 问候 Greetings ”(图 1)。这个机器人已经经过训练,能够理解基本的问候。 图 1: 设置机器人属性
  4. 给机器人提供一个名字。目前来说,你可以让机器人讲一些笑话,所以我们将它命名为 Joke Bot,选择英语作为默认语言。
  5. 因为你不会处理任何敏感信息,所以在数据策略下选择非个人数据。然后选择公共机器人选项并点击创建一个机器人。

所以这就是你在 Recast 平台创建的机器人。

开发一个机器人的五个阶段

用 Recast 官方博客的话说,在机器人的生命中有五个阶段。

  • 训练——教授机器人需要理解的内容
  • 构建——使用机器人构建工具创建你的对话流
  • 编写代码——将机器人连接到外部 API 或数据库
  • 连接——将机器人发布到一个或多个消息平台
  • 监控——训练机器人让它更敏锐,并且了解其使用情况

通过意图训练机器人

你可以在仪表板上看到搜索、分叉或创建一个 意图 intent 的选项。“‘意图’是一系列含义相同但构造不同的表达。‘意图’是你的机器人理解能力的核心。每个‘意图’代表了机器人可以理解的一种想法。”(摘自 Recast.AI 网站)

图 2: 机器人面板

就像先前定的,你需要一个讲笑话的机器人。所以底线是这个机器人可以理解用户在要求它讲笑话,它不应该在用户仅仅说了“Hi”的情况下回复一个笑话——这可不妙。把用户可能说的话进行分组,比如:

Tell me a joke.(给我讲个笑话。)
Tell me a funny fact.(告诉我一个有趣的事实。)
Can you crack a joke?(你可以讲个笑话吗?)
What’s funny today?(今天有什么有趣的?)

……

在继续从头开始创建意图之前,让我们来看看搜索/分叉选项。在搜索框输入 “Joke”(图 3)。系统给出了全球的 Recast 用户创建的公开的意图清单,这就是为什么说 Recast 天然就是协作性质的。所以其实没有必要从头开始创建所有的意图,可以在已经创建的基础上进行构建。这就降低了训练具有常见意图的机器人所需的投入。

图 3: 搜索一个意图

  • 选择列表中的第一个意图并将其分叉到机器人上。
  • 点击 分叉 Fork 按钮。这个意图就添加到了机器人中(图 4)。 图 4: @joke 意图
  • 点击意图 @joke,会显示出这个意图中已经存在的 表达 expression 列表(图 5)。 图 5: 预定义表达
  • 向其添加更多的表达(图 6)。 图 6: 建议的表达

添加了一些表达之后,机器人会给出一些建议,像图 7 展示的那样。选择几个将它们添加到意图中。你还可以根据机器人的上下文,标记你自己的自定义实体来检测关键词。

图 7: 建议的表达

技能

技能 skill 是一块有明确目的的对话,机器人可以据此运行并达到目标。它可以像打招呼那么简单,也可以更复杂,比如基于用户提供的信息提供电影建议。

技能需要的不能只是一对问答,它需要多次交互。比如考虑一个帮你学习汇率的机器人。它一开始会问原货币,然后是目标货币,最后给出准确回应。结合技能可以创建复杂的对话流。

下面是如何给笑话机器人创建技能:

  • 去到 构建(Build) 页。点击 “+” 图标创建技能。
  • 给技能命名 “Joke”(图 8) 图 8: 技能面板
  • 创建之后,点击这个技能。你会看到四个标签。 读我 Read me 触发器 Triggers 需求 Requirements 动作 Actions
  • 切换到需求页面。只有在笑话意图存在的时候,你才应该存储信息。所以,像图 9 那样添加一个需求。 图 9: 添加一个触发器

由于这个简单的使用范例,你不需要在需求选项卡中考虑任何特定的需求,但可以考虑只有当某些关键字或实体出现时才需要触发响应的情况——在这种情况下你需要需求。

需求是某个技能执行动作之前需要检索的意图或实体。需求是对话中机器人可以使用的重要信息。例如用户的姓名或位置。一旦一个需求完成,相关的值就会存储在机器人的内存中,供整个对话使用。

现在让我们转到动作页面设置 回应 response (参见图 10)。

图 10: 添加动作

点击添加 新消息组 new message group 。然后选择 发送消息 Send message 并添加一条文本消息,在这个例子中可以是任何笑话。当然,你肯定不想让你的机器人每次都说一样的笑话,你可以添加多条消息,每次从中随机选择一条。

图 11: 添加文本消息

频道集成

一个成功的机器人还依赖于它的易得性。Recast 有不少的内置消息频道集成,如 Skype for Business、Kik Messenger、Telegram、Line、Facebook Messenger、Slack、Alexa 等等。除此之外,Recast 还提供了 SDK 用于开发自定义的频道。

此外,Recast 还提供一个可立即使用的网页聊天(在连接页面中)。你可以自定义颜色主题、标题、机器人头像等。它给你提供了一个可以添加到页面的脚本标签。你的界面现在就可以使用了(图 12)。

图 12: 设置网络聊天

网页聊天的代码是开源的,开发者可以更方便地定制外观、标准回应类型等等。面板提供了如何将机器人部署到各种频道的逐步过程说明。这个笑话机器人部署在 Telegram 和网页聊天上,就像图 13 展示的那样。

图 13: 网页聊天部署

图 14: Telegram 中开发的机器人

还有更多

Recast 支持多语言,创建机器人的时候选择一个语言作为基础,但之后你有选项可以添加更多你想要的语言。

图 15: 多语言机器人

这里的例子是一个简单的静态笑话机器人,实际使用中可能需要更多的和不同系统的交互。Recast 有 Web 钩子功能,用户可以连接到不同的系统来获取回应。同时它还有详细的 API 文档来帮助使用平台的每个独立功能。

至于分析,Recast 有一个监控面板,帮助你了解机器人的准确度以及更加深入地训练机器人。


via: https://opensourceforu.com/2019/11/creating-a-chat-bot-with-recast-ai/

作者:Athira Lekshmi C.V 选题:lujun9972 译者:alim0x 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

通过添加声音到你的游戏中,听听当你的英雄战斗、跳跃、收集战利品时会发生什么。学习如何在这个 Pygame 系列的第十三篇文章中,创建一个声音平台类精灵。

Python 3 中使用 Pygame 模块来创建电脑游戏的系列文章仍在进行中,这是第十三部分。先前的文章是:

  1. 通过构建一个简单的掷骰子游戏去学习怎么用 Python 编程
  2. 使用 Python 和 Pygame 模块构建一个游戏框架
  3. 如何在你的 Python 游戏中添加一个玩家
  4. 用 Pygame 使你的游戏角色移动起来
  5. 如何向你的 Python 游戏中添加一个敌人
  6. 在 Pygame 游戏中放置平台
  7. 在你的 Python 游戏中模拟引力
  8. 为你的 Python 平台类游戏添加跳跃功能
  9. 使你的 Python 游戏玩家能够向前和向后跑
  10. 在你的 Python 平台类游戏中放一些奖励
  11. 添加计分到你的 Python 游戏
  12. 在你的 Python 游戏中加入投掷机制

Pygame 提供了一种简单的方法来集成声音到你的 Python 电脑游戏中。Pygame 的 mixer 模块 可以依据命令播放一个或多个声音,并且你也可以将这些声音混合在一起,例如,你能够在听到你的英雄收集奖励或跳过敌人声音的同时播放背景音乐。

集成 mixer 模块到一个已存在的游戏中是很容易的,因此,与其给你代码示例来向你展示放置它们的位置,不如在这篇文章解释在你的应用程序中获得声音所需的四个步骤。

启动 mixer

首先,在你代码的设置部分,启动 mixer 进程。你的代码已经启动 Pygame 和 Pygame 字体,因此将它们归类到一起是一个很好的主意:

pygame.init()
pygame.font.init()
pygame.mixer.init() # add this line

定义声音

接下来,你必需定义你想要使用的声音。这样就要求你的计算机上有声音文件,就像使用字体就要求你有字体文件,使用图像就要求你有图像文件一样。

你还必需把这些声音与你的游戏捆绑在一起,以便任何玩你游戏的人都有这些声音文件。

为将一个声音与你的游戏捆绑在一起,首先在你的游戏目录中创建一个新的目录,就像你为你图像和字体创建的目录一样。称它为 sound:

s = 'sound'

尽管在互联网上有很多声音文件,下载这些声音文件并将其与你的游戏一起分发并不一定是合法的。这看起来是很奇怪的,因为这么多来自著名电脑游戏的声音是流行文化的一部分,但法律就是这样运作的。如果你想与你的游戏一起分发一个声音文件,你必需找到一个开源或共创许可的声音文件,它们准许与游戏一起提供声音。

这里有一些专门提供自由和合法的声音文件的网站,包括:

一些声音文件只要你给予作曲家或声音设计师一个致谢就可以自由使用。在与你的游戏捆绑前,仔细阅读使用条件!音乐家和声音设计师在声音上的工作就像你在代码上的工作一样努力,因此即使他们不要求,给予他们致谢也是极好的。

给予你的声音源文件一些致谢,在一个名为 CREDIT 的文本文件中列出你使用的声音,并在你的游戏文件夹中放置该文本文件。

你也可以尝试制作你自己的音乐。优秀的 LMMS 音频工作站易于使用,并带有很多有趣的声音。它在所有主要的平台上都可以使用,也可以导出为 Ogg Vorbis(OGG)音频格式。

添加声音到 Pygame

当你找到你喜欢的一个声音文件时,下载它。如果它是一个 ZIP 或 TAR 文件,提取它并将其移动到你游戏目录中的 sound 文件夹中。

如果声音文件的名字带有空格或特殊字符,重新命名它。文件名称是完全随意的,它的名称越简单,你就越容易输入到你的代码中。

大多数的电脑游戏使用 OGG 格式声音文件,因为这种格式可以占有较小空间而提供高质量的声音。当你下载一个声音文件时,它可能是一个 MP3、WAVE、FLAC 或者其它的音频格式。为保持你的文件的较高兼容性和降低下载文件大小,使用一个像 fre:acMiro 这样的工具来转换这些的文件格式为 Ogg 格式。

例如,假设你已经下载一个称为 ouch.ogg 的声音文件。

在你代码的设置部分中,创建一个变量,代表你想使用的声音文件:

ouch = pygame.mixer.Sound(os.path.join(s, 'ouch.ogg'))

触发一个声音

为使用一个声音,你所要做的就是在你想触发它的时候调用这个变量。例如,当你的玩家击中一名敌人时,触发 OUCH 声音效果:

for enemy in enemy_hit_list:
    pygame.mixer.Sound.play(ouch)
    score -= 1

你可以为各种动作创建声音,例如,跳跃、收集奖励、投掷、碰撞,以及其他任何你能想象到的动作。

添加背景音乐

如果你有想在你的游戏的背景中播放的音乐或令人激动的音效,你可以使用 Pygame 中的 mixer 模块中的 music 函数。在你的设置部分中,加载音乐文件:

music = pygame.mixer.music.load(os.path.join(s, 'music.ogg'))

然后,开始音乐:

pygame.mixer.music.play(-1)

-1 值告诉 Pygame 无限循环音乐文件。你可以将其设置为从 0 到更高的值之间的任意数值,以定义音乐在停止前循环多少次。

享受音效

音乐和声音可以为你的游戏添加很多韵味。尝试添加一些声音到你的 Pygame 工程!


via: https://opensource.com/article/20/9/add-sound-python-game

作者:Seth Kenlon 选题:lujun9972 译者:robsean 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Fossil 是一个集版本控制系统、bug 追踪、维基、论坛以及文档解决方案于一体的系统。

每个开发者都知道,追踪代码的修改是至关重要的。有时候你会处于好奇或者教育的目的需要展示你的项目开始和进化的历史。有时候你想让其他的开发者参与到你的项目中,因此你需要一种值得信赖的能合并不同代码分支的方法。更极端一点,有时候你为了解决一个问题而修改的代码导致已有的功能不能正常使用。

Fossil 源码管理系统是由著名的 SQLite 数据库的作者开发的一个集版本控制系统、bug 追踪、维基、论坛以及文档解决方案于一体的系统。

安装 Fossil

Fossil 是一个独立的 C 程序,因此你可以从它的网站上下载后放在环境变量 PATH 中的任意位置。例如,假定 /usr/local/bin 已经在你的环境变量中(默认情况下是在的):

$ wget https://fossil-scm.org/home/uv/fossil-linux-x64-X.Y.tar.gz
$ sudo tar xvf fossil-linux-x64-X.Y.tar.gz --directory /usr/local/bin

你也可以通过包管理器从软件仓库中找到 Fossil,或者直接从源码编译。

创建一个 Fossil 仓库

如果你已经有一个代码项目,想用 Fossil 来追踪,那么第一步就是创建一个 Fossil 仓库:

$ fossil init myproject.fossil
project-id: 010836ac6112fefb0b015702152d447c8c1d8604
server-id:  54d837e9dc938ba1caa56d31b99c35a4c9627f44
admin-user: klaatu (initial password is "14b605")

创建 Fossil 仓库的过程中会返回三行信息:一个唯一的项目 ID、一个唯一的服务器 ID 以及管理员 ID 和密码。项目 ID 和服务器 ID 是版本数字。管理员凭证表明你对这个仓库的所有权,当你把 Fossil 作为服务器让其他用户来访问时可以使用管理员权限。

Fossil 仓库工作流

在你使用 Fossil 仓库之前,你需要先为它的数据创建一个工作路径。你可以把这个过程类比为使用 Python 时创建一个虚拟环境或者解压一个只用来备份的 ZIP 文件。

创建一个工作目录并进入:

$ mkdir myprojectdir
$ cd myprojectdir

把你的 Fossil 打开到刚刚创建的目录:

$ fossil open ../myproject
project-name: <unnamed>
repository:   /home/klaatu/myprojectdir/../myproject
local-root:   /home/klaatu/myprojectdir/
config-db:    /home/klaatu/.fossil
project-code: 010836ac6112fefb0b015702152d447c8c1d8604
checkout:     9e6cd96dd675544c58a246520ad58cdd460d1559 2020-11-09 04:09:35 UTC
tags:         trunk
comment:      initial empty check-in (user: klaatu)
check-ins:    1

你可能注意到了,Fossil 在你的家目录下创建了一个名为 .fossil 的隐藏文件,用来追踪你的全局 Fossil 配置。这个配置不是只适用于你的一个项目的;这个文件只会在你第一次使用 Fossil 时生成。

添加文件

使用 addcommit 子命令来向你的仓库添加文件。例如,创建一个简单的 README 文件,把它添加到仓库:

$ echo "My first Fossil project" > README
$ fossil add README
ADDED  README
$ fossil commit -m 'My first commit'
New_Version: 2472a43acd11c93d08314e852dedfc6a476403695e44f47061607e4e90ad01aa

使用分支

Fossil 仓库开始时默认使用的主分支名为 trunk。当你想修改代码而又不影响主干代码时,你可以从 trunk 分支切走。创建新分支需要使用 branch 子命令,这个命令需要两个参数:一个新分支的名字,一个新分支的基分支名字。在本例中,只有一个分支 trunk,因此尝试创建一个名为 dev 的新分支:

$ fossil branch --help
Usage: fossil branch new BRANCH-NAME BASIS ?OPTIONS?
$ fossil branch new dev trunk
New branch: cb90e9c6f23a9c98e0c3656d7e18d320fa52e666700b12b5ebbc4674a0703695

你已经创建了一个新分支,但是你当前所在的分支仍然是 trunk

$ fossil branch current
trunk

使用 checkout 命令切换到你的新分支 dev

$ fossil checkout dev
dev

合并修改

假设你在 dev 分支中添加了一个新文件,完成了测试,现在想把它合并到 trunk。这个过程叫做合并

首先,切回目标分支(本例中目标分支为 trunk):

$ fossil checkout trunk
trunk
$ ls
README

这个分支中没有你的新文件(或者你对其他文件的修改),而那些内容是合并的过程需要的信息:

$ fossil merge dev
 "fossil undo" is available to undo changes to the working checkout.
$ ls
myfile.lua  README

查看 Fossil 时间线

使用 timeline 选项来查看仓库的历史。这个命令列出了你的仓库的所有活动的详细信息,包括用来表示每次修改的哈希值、每次提交时填写的信息以及提交者:

$ fossil timeline
=== 2020-11-09 ===
06:24:16 [5ef06e668b] added exciting new file (user: klaatu tags: dev)
06:11:19 [cb90e9c6f2] Create new branch named "dev" (user: klaatu tags: dev)
06:08:09 [a2bb73e4a3] *CURRENT* some additions were made (user: klaatu tags: trunk)
06:00:47 [2472a43acd] This is my first commit. (user: klaatu tags: trunk)
04:09:35 [9e6cd96dd6] initial empty check-in (user: klaatu tags: trunk)
+++ no more data (5) +++

 title=

公开你的 Fossil 仓库

因为 Fossil 有个内置的 web 界面,所以 Fossil 不像 GitLab 和 Gitea 那样需要主机服务。Fossil 就是它自己的主机服务,只要你把它放在一台机器上就行了。在你公开你的 Fossil 仓库之前,你还需要通过 web 用户界面(UI)来配置一些信息:

使用 ui 子命令启动一个本地的实例:

$ pwd
/home/klaatu/myprojectdir/
$ fossil ui

“Users” 和 “Settings” 是安全相关的,“Configuration” 是项目属性相关的(包括一个合适的标题)。web 界面不仅仅是一个方便的功能。 它是能在生产环境中使用并作为 Fossil 项目的宿主机来使用的。它还有一些其他的高级选项,比如用户管理(或者叫自我管理)、在同一个服务器上与其他的 Fossil 仓库进行单点登录(SSO)。

当配置完成后,关掉 web 界面并按下 Ctrl+C 来停止 UI 引擎。像提交代码一样提交你的 web 修改。

$ fossil commit -m 'web ui updates'
New_Version: 11fe7f2855a3246c303df00ec725d0fca526fa0b83fa67c95db92283e8273c60

现在你可以配置你的 Fossil 服务器了。

  1. 把你的 Fossil 仓库(本例中是 myproject.fossil)复制到服务器,你只需要这一个文件。
  2. 如果你的服务器没有安装 Fossil,就在你的服务器上安装 Fossil。在服务器上安装的过程跟在本地一样。
  3. 在你的 cgi-bin 目录下(或它对应的目录,这取决于你的 HTTP 守护进程)创建一个名为 repo_myproject.cgi 的文件:
#!/usr/local/bin/fossil
repository: /home/klaatu/public_html/myproject.fossil

添加可执行权限:

$ chmod +x repo_myproject.cgi

你需要做的都已经做完了。现在可以通过互联网访问你的项目了。

你可以通过 CGI 脚本来访问 web UI,例如 https://example.com/cgi-bin/repo_myproject.cgi

你也可以通过命令行来进行交互:

$ fossil clone https://[email protected]/cgi-bin/repo_myproject.cgi

在本地的克隆仓库中工作时,你需要使用 push 子命令把本地的修改推送到远程的仓库,使用 pull 子命令把远程的修改拉取到本地仓库:

$ fossil push https://[email protected]/cgi-bin/repo_myproject.cgi

使用 Fossil 作为独立的托管

Fossil 将大量的权力交到了你的手中(以及你的合作者的手中),让你不再依赖托管服务。本文只是简单的介绍了基本概念。你的代码项目还会用到很多有用的 Fossil 功能。尝试一下 Fossil。它不仅会改变你对版本控制的理解;它会让你不再考虑其他的版本控制系统。


via: https://opensource.com/article/20/11/fossil

作者:Klaatu 选题:lujun9972 译者:lxbwolf 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

使用色键(或绿屏)技巧来设置你电脑游戏中图片的透明度。

不管你是否正在使用 PythonLua 编程一个游戏或一个 APP,你都有可能在你的游戏资源中使用 PNG 图像。PNG 格式图像的一个优点是能够存储一个 alpha 通道,这在一个 JPEG 格式的图像中是不可能获得的。alpha 在本质上是不可见的或透明的“颜色”。alpha 是你图像 不可见 的一部分。例如,你要绘制一个甜甜圈,甜甜圈的空洞将使用 alpha 填充,你就可以看到它后面的任何东西。

一个常见的问题是如何找到一幅图像的 alpha 部分。有时你的编程框架,不管它是 Python ArcadePygame、LÖVE,或者其它的任何东西都会检测出 alpha 通道,(在适当地调用函数后)将其作为透明处理。这意味着它将不会在 alpha 部分来渲染新的像素,而留下甜甜圈的空洞。100% 是透明的,0% 是不透明的,在功能上起到“不可见”的作用。

有些时候,你的框架与你的图像资源在 alpha 通道的位置上是不一致的(或者,alpha 通道根本就不存在),你在你想要透明度的地方却得到像素。

这篇文章描述了我所知道的最可靠的方法来解决透明度的问题。

色键

在计算机图形学中,有一些有助于确定每一个像素是如何渲染的值。 色度 Chrominance (或者 chroma),描述一个像素的饱和度或强度。 色键 chroma key 技术(也称为 绿屏 green screening )最初是作为一种化学工艺而发展起来的,在复印一张底片时,使用一种特定的 无光泽 的颜色(最初是蓝色,后来是绿色)来故意遮掩,以允许使用另一幅图像来取代曾经有蓝色或绿色屏幕的地方。这是一种简化的解释,但是它说明了计算机图形学中被称为 alpha 通道的起源。

alpha 通道是保存在图像中的信息,用以标识要透明的像素。例如,RGB 图像有红、绿、蓝通道。RGBA 图像包含红、绿、蓝通道,以及 alpha 通道。alpha 值的范围可以从 0 到 1 ,使用小数是也有效的。

因为一个 alpha 通道可以用几种不同的方法表达,因此依赖于嵌入的 alpha 通道可能是有问题的。作为替代方案,你可以在你的游戏框架中选择一种颜色并将其转化为一个 0 的 alpha 值。要做到这一点,你必须知道在你图像中的颜色值。

准备你的图片

要准备一个专门为色度键保留明确颜色的图形,在你最喜欢的图片编辑器中打开图片。我建议使用 GIMPGlimpse,但是 mtPaintPinta,甚至 Inkscape 也能很好地工作,这取决于你的图像的性质,以及你将这些操作指南转换到一种不同图片编辑器工具的能力。

首先打开这幅 Tux 企鹅的图像:

 title=

选择图片

在图片打开后,转到 窗口 菜单,选择 可停靠对话框 ,接下来选择 图层。在 图层 面板中 Tux 图层上右击。从弹出菜单中,选择 Alpha 到选区 。如果你的图像没有内置的 alpha 通道,那么你必须手动创建你自己的选区。

 title=

为手动创建一个选区,单击来自工具箱的 路径 工具。

 title=

使用 路径 工具,在图像周围移动鼠标,在其轮廓的每个主要交叉点处都单击和释放(不要拖动)。 不要担心沿着曲线走;只需要找到主要的交叉点和拐角。这将在每个点处创建一个节点,并在节点中间绘制一条条线段。你不需要闭合你的路径,因此当你最后到达你开始时的交叉点时,你就完成了。

 title=

在你创建你的轮廓路径后,转到 窗口 菜单,选择 可停靠对话框 ,接下来选择 工具选项 。在 工具选项 面板中,选择 编辑 (Ctrl) 。随着这项操作的激活,你可以编辑你刚刚通过单击线或单击节点绘制的路径,并通过调整它们来更好地适应你的图像。你甚至能够将直线弯曲。

 title=

现在从 窗口 > 可停靠对话框 菜单中选择 路径 面板。在 路径 面板中,单击 路径到选区 按钮。你的绘图现在已经被选中了。

扩大选区

如果你觉得你的选区太紧贴了,你可以通过扩大来给予你自己的选区一些富余。当我想在一张图像周围采用或加厚一个边框时,我有时会这么扩大选区。

为扩大一个选区,单击 选择 菜单,选择 扩大 。输入一个像素值并单击 确定

反转选区

你已经选择了你的图形,但是你真正想选择的东西却 不包括 你所选择的图像。这是因为你要创建一个 alpha 蒙版来定义图像中的一些内容的来被其它一些内容所替换。换句话说,你需要标记那些将被转变为不可见的像素。

为了反转选择区,单击 选择 菜单,选择 反转 。现在除你的图像以外的一切东西都是被选择的。

使用 alpha 填充

随着选择了除了你的图像以外的一切东西,再选择你想使用的颜色来指定你的 alpha 蒙版。最常用的颜色是绿色(正如你可能从术语“绿屏”中所猜到的一样)。绿色不是什么神奇的颜色,甚至也不是特定的绿色色调。之所以使用它是因为人们经常处理不包含绿色色素的图像,这样人们能够很容易分离出绿色,而不会意外地分离出图像中重要的部分。当然,如果你的图像是一位绿色的外星人或一枚绿宝石或一些 确实 包含绿色的东西,那么你应该使用一种不同的颜色。只要你所选择的颜色是单一的单色,那么你就可以使用你所希望的任意颜色。如果你正在处理很多图像,你的选择应该在所有图像中保持一致。

 title=

使用你选择的颜色值来设置你的前景色。为确保你的选择是精确的,使用 HTMLHSV 表示的颜色。例如,如果你正在使用纯绿色,它可以在 GIMP(以及大多数的开放源码图像应用程序)中表示为 00ff0000 是红色,FF 是绿色,00 是蓝色,F 是最大值)。

 title=

不管你选择什么颜色,务必记录下 HTML 或 HSV 的值,以便你可以为每一张图像使用完全相同的颜色。

为填充你的 alpha 蒙版,单击 编辑 菜单,选择 使用前景色填充

平整和导出

如果你在你的图像周围留下边框,设置背景颜色来着色你想使用的边界笔刷。这通常是黑色或白色,但是它也可以是任何适宜你游戏审美观的颜色。

在你设置背景颜色后,单击 图像 菜单,选择 平整图像。不管你是否添加了边框,这样做都是安全的。这个过程将从图像中移除 alpha 通道,并使用背景色填充任何“透明的”像素。

 title=

你现在已经为你的游戏引擎准备好了一张图像。导出图像为你的游戏引擎喜欢的任何格式,接下来使用游戏引擎所需要的每一个函数来将图像导入的你的游戏中。在的代码中,设置 alpha 值为 00ff00(或你使用的任何颜色),接下来使用游戏引擎的图像转换器来将该颜色作为 alpha 通道处理。

其它的方法

这不是唯一能在你游戏图像中获取透明度的方法。查看你游戏引擎的文档来找出它是如何默认尝试处理 alpha 通道的,在你不确定的时候,尝试让你的游戏引擎来自动侦测图像中透明度,然后再去编辑它。有时,你游戏引擎的预期值和你图像的预设值恰巧匹配,那么你就可以直接获取透明度,而不需要做任何额外的工作。

不过,当这些尝试都失败时,尝试一下色键。它为电影业工作了将近 100 年,它也可以为你工作。


via: https://opensource.com/article/20/9/chroma-key-gimp

作者:Seth Kenlon 选题:lujun9972 译者:robsean 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出