华为图像服务(HUAWEI Image Kit)是华为面向开发者提供的场景智能设计和场景动效服务。通过集成场景智能设计SDK和场景动效SDK,即可获取24种滤镜,9种图文智能排版、图像主题标签,贴纸花字,图片裁剪和给图片添加动效能力。
在本篇Codelab中,您将使用已经创建好的Demo Project实现对华为图像服务的API调用,通过Demo Project您可以体验到:
Android基础开发能力
集成HUAWEI HMS Core能力,需要完成以下准备工作
提示:需要通过注册成开发者才能完成集成准备中的操作。
步骤1:打开Android Studio。
步骤2:选择"File > Open > 示例工程解压路径",点击"OK"。
步骤3:添加HUAWEI agcp插件、配置仓库、依赖包、混淆脚本、权限(示例代码中已经配好,但后续您的工程需要参考配置)。
3. 配置混淆脚本
步骤4:选择Android Studio的"File > Sync Project with Gradle Files",同步工程。
导入完成后,连接手机,打开USB调试模式。点击Android Studio的图标,运行Android Studio工程,打包生成APK,安装在测试手机上,运行如下图所示:
这是主界面,分别集成了图示5种能力,从上到下分别是滤镜,杂志排版,智能标签,贴纸花字,裁剪功能。点击各个按钮会跳转到相应的主界面。
点击"FILTER"按钮,跳转到滤镜界面:
点击"SMARTLAYOUT"按钮,跳转到杂志排版界面:
点击"THEMETAG"按钮,跳转到智能标签界面:
点击"STICKER"按钮,跳转到贴纸界面:
点击"CROP"按钮,跳转到图片选择页面,选择需要裁剪的图片,跳转到裁剪界面:
步骤1:导入滤镜服务包。
步骤2:获取服务实例。
入参authJson:
参数列表
类型
M/O(可选/必选)
说明
projectId
String
appId
String
authApiKey
String
clientSecret
String
clientId
String
token
String
会话token,用于验证第三方APP身份,建议由第三方开发者的服务器通过clientId+ClientSecret从AGC获取。
步骤4:构建参数对象。
入参requestJson和imageBitmap:
参数列表
类型
M/O(必选/可选)
说明
requestJson
JSONObject
图片处理请求参数
imageBitmap
Bitmap
需要处理的图片(宽高比在1:3和3:1之间,宽高像素均不超过8000)
requestJson字段信息:
参数列表
类型
M/O(必选/可选)
说明
requestId
String
业务提供的请求ID。
taskJson
JSONObject
具体的业务请求信息。
authJson
JSONObject
鉴权参数。
滤镜的taskJson字段信息:
参数列表
类型
M/O(必选/可选)
说明
filterType
int
颜色映射的图片索引,索引范围0—24(0为原图)。
intensity
float
滤镜强度,取值范围[0,1.0],默认为1.0。
compressRate
Float
压缩率,取值范围(0,1.0],默认为1.0。
filterType映射表:
10
11
12
黑白
棕调
慵懒
小苍兰
富士
桃粉
海盐
薄荷
蒹葭
复古
棉花糖
青苔
13
14
15
16
17
18
19
20
21
22
23
24
日光
时光
雾霾蓝
向日葵
硬朗
古铜黄
黑白调
黄绿调
黄调
绿调
青调
紫调
authJson映射表:请参见步骤3中authJson表。
步骤5:滤镜服务获取结果。
开发者在调用滤镜接口时,需要输入待处理图片的Bitmap,并选择需要的滤镜效果。滤镜服务根据传入的参数对原始图片进行处理后,返回处理后图片的Bitmap。注意调取接口时,需要开启一个子线程去执行,不能在主线程执行。
visionResult返回值:
参数列表
类型
M/O(必选/可选)
说明
resultCode
int
服务状态码。
responseJson
JsonObject
服务返回的结果。
image
Bitmap
处理后的图片数据,对于直接返回图片的API,通过该字段传递处理后的图片数据。
responseJson字段信息:
参数列表
类型
M/O(必选/可选)
说明
requestId
String
业务提供的请求id(如果请求时携带了就返回,没有携带就不返回)。
serviceId
String
调用的服务名。
步骤6:停止服务。
当不再需要滤镜效果时,调用该接口停止服务,stopCode为0时,执行成功。
步骤1:导入图文智能排版服务包。
步骤2:获取图文智能排版服务实例。
步骤4:构建参数对象。
参数列表
类型
M/O(必选/可选)
说明
requestJson
JSONObject
图片处理请求参数。
imageBitmap
Bitmap
需要制作图文智能排版的图片(宽高比9:16)。
requestJson字段信息:
参数列表
类型
M/O(必选/可选)
说明
requestId
String
业务提供的请求ID。
taskJson
JSONObject
具体的业务请求信息。
authJson
JSONObject
鉴权参数。
图文智能排版的taskJson字段信息:
参数列表
类型
M/O(必选/可选)
说明
title
String
文案标题,必填字段,不超过7个中文汉字(总字符数量不超过10个),如果超过字数限制会被强制截断。
description
String
文案内容,不超过44个中文汉字(总字符数量不超过66个),超过字数限制则进行截断,用‘...'代替。
copyRight
String
anchor
String
"详情"或"查看更多",建议4个中文汉字(总字符数不超过6个)超过字数限制则进行截断,用‘...'代替。
isNeedMask
boolean
是否需要蒙层。
styleList
JSONArrary
样式列表,默认[], 若为默认值,依据描述文本是否有换行符选择文本;若用户传入list,从用户给出的版式中选择。取值范围[‘info1', ‘info2', ..., ‘info9']。styleList中,info8为竖板排版,当前仅支持中文版式,不支持其他语言版式;info3为默认兜底版式;若用户输入info8且输入标签、文本描述有非中文语种,返回用户info3版式。
authJson映射表:请参见"滤镜服务实现步骤 -> 步骤3 -> authJson表"。
图文智能排版服务requestJson示例:
步骤5:图文智能排版服务获取结果。
ImageLayoutInfo 返回值:
参数列表
类型
M/O(必选/可选)
说明
resultCode
int
返回结果码。
viewGroup
ViewGroup
返回的目标view。
maskView
View
返回蒙层view(无蒙层时为null)。
response
JSONObject
返回结果。
response字段:
参数列表
类型
M/O(必选/可选)
说明
locationX
int
返回view位于手机的起始位置X。
locatiinY
int
返回view位于手机的起始位置Y。
maskColor
int
返回蒙层的颜色值。
colorHeigh
int
返回蒙层的高度(无蒙层时为0)。
requestId
String
业务提供的请求ID(如果请求时携带了就返回,没有携带就不返回)。
serviceId
String
调用的服务名。
步骤6:停止服务。
当不再需要图文智能排版效果时,调用该接口停止服务,stopCode为0时,执行成功。
步骤1:导入图像主题标签服务包。
步骤2:获取图像主题标签服务实例。
步骤4:构建参数对象。
参数列表
类型
M/O(必选/可选)
说明
requestJson
JSONObject
图片处理请求参数。
imageBitmap
Bitmap
需要识别的图片。
requestJson字段信息:
参数列表
类型
M/O(必选/可选)
说明
requestId
String
业务提供的请求ID。
taskJson
JSONObject
具体的业务请求信息。
authJson
JSONObject
鉴权参数。
图像主题标签的taskJson字段信息如下:
参数列表
类型
M/O(必选/可选)
说明
language
String
指定标签是中文还是英文, 取值为"cn"或者"en"。
needObjectList
boolean
指定是否需要先返回图片中的主体列表。
图像主题标签服务requestJson示例:
步骤5:图像主题标签服务获取结果。
开发者在调用图像主题标签接口时,需要输入待处理图片Bitmap等(参见步骤4)。此功能需要联网,如不联网,则返回错误码。注意因为接口涉及网络请求,需要开启子线程去调用接口。
result返回值:
参数列表
类型
M/O(必选/可选)
说明
resultCode
int
服务状态码。
response
JSONObject
服务返回的结果。
response返回值:
参数列表
类型
M/O(必选/可选)
说明
resultCode
int
返回结果码。
serviceId
String
返回服务Id。
requestId
String
返回请求Id。
tags
JSONArray
返回标签结果,见下表。
objectList
JSONArray
如果传入的needObjectList为true,则返回主体检测结果。
JSONArray tags:
参数列表
类型
M/O(必选/可选)
说明
tagName
String
标签名。
tagConfidence
float
置信度。
JSONArray objectList:
参数列表
类型
M/O(必选/可选)
说明
type
int
主体所属的类型。
possibility
Float
置信度。
box
JSONObject
主体位置信息。
JSONObject box:
参数列表
类型
M/O(必选/可选)
说明
width
double
主体区域宽度。
height
double
主体区域高度。
center_x
double
主体中心位置的横轴坐标。
center_y
double
主体中心位置的纵轴坐标。
步骤6:停止服务。
当不再需要主题标签效果时,调用该接口停止服务,stopCode为0时,执行成功。
步骤2:提供资源文件。
步骤3:添加贴纸花字。
请求接口参数描述:
参数列表
类型
M/O(必选/可选)
说明
rootPath
String
资源文件根目录。
fileName
String
如果是贴纸,需要指定的文件名,其他可以传null。
代码示例:
步骤4:更新花字的文本。
图片裁剪服务开发步骤如下。
通过findViewById获取到CropLayoutView 对象后,可以调用具体的逻辑方法。
步骤2:设置需要裁剪的图片,设置完成后,就可以对view进行操作。
步骤3:调整好图片被裁剪的大小,获取裁剪后图片的bitmap格式。
步骤1:打开Android Studio。
步骤2:选择"File > Open > 示例工程解压路径",点击"OK"。
步骤3:添加HUAWEI agcp插件、配置仓库、依赖包、混淆脚本、权限(示例代码中已经配好,但后续您的工程需要参考配置)。
3. 配置混淆脚本
注意:在Android6.0及以上版本需要动态申请读取外部存储权限。
步骤4:选择Android Studio的"File > Sync Project with Gradle Files",同步工程。
导入完成后,连接手机,打开USB调试模式。点击Android Studio的图标,运行Android Studio工程,打包生成APK,安装在测试手机上,运行如下图所示。
将资源置文件存储到指定路径
步骤2:导入场景动效服务包。
步骤4:初始化接口对象。初始化时需要传入待解析资源路径sourcePath(步骤1中资源存储路径,例如"sdcard/animation")和鉴权认证所需信息(json形式,例如:APIKey以及证书指纹等,参见"场景智能设计服务开发 -> 高级演练 -> 滤镜服务实现步骤 -> 步骤3 -> authJson表")。只有通过校验,第三方应用才能使用场景动效服务。
说明:因安全问题,示例代码中未显示真实鉴权信息,您在开发时需填写真实的鉴权信息。
步骤5:获取view,并加入创建的layout中。建议显示场景动效的布局宽高与屏幕等宽等高,否则会出现view被截断的情况。目前支持2种获取视图方式。
步骤6:控制基础动画播放、暂停、恢复和停止。
2.暂停动画(该方法只作用于基础动效)。
调用接口。
3.恢复动画。当开发者需要恢复暂停的基础动效时,调用该接口。
步骤7:开发者向Kit传递信息。
在渲染过程中,通过调用setKeyValueInfo接口动态改变变量#var,达到控制图片可见性。
入参json:
参数
类型
M/O(必选/可选)
说明
recordType
int
录制类型,取值{1,2,3}。1表示录制视频;2表示录制GIF;3表示同时录制视频和GIF。
videoScale
double
视频压缩比,取值范围为[0.5-1],只保留1位小数。录制视频时该参数必选。
videoFps
int
视频帧率,取值范围为[5-20]。录制视频时该参数必选。
gifScale
double
GIF压缩比,取值范围为[0.1-0.5]。录制GIF时该参数必选。
gifFps
int
GIF的帧率,取值范围为[10-20]。录制GIF时该参数必选。
json示例:
参数
类型
说明
recordType
int
录制类型,取值{1,2,3}。1表示录制视频;2表示录制GIF;3表示同时录制视频和GIF。