在上一篇如何給應用增加圖片編輯功能:剪裁、濾鏡、貼紙、排版、標簽,我們詳細講解了“圖片”風口下,各類應用可能面臨的“窘境”:由於應用內缺乏圖片編輯設計能力,或者提供的圖片編輯設計能力不足,導致原本功能強大的優質應用,沒法提高用戶留存率,影響應用自身競爭實力。華為圖像服務旨在為各類交互應用解決這一問題,可以說是應時而生,應勢而生。在詳細介紹華為圖像服務五大圖像編輯能力分別是什么、各自的應用場景以及功能價值的基礎上,接下來將為大家帶來五大圖片編輯功能的具體開發步驟。
濾鏡服務

開發步驟
濾鏡服務開發步驟如下,需要您提供圖片和相關參數,得到相應的返回值。
1、導入濾鏡服務包。
Java代碼
import com.huawei.hms.image.vision.*;
import com.huawei.hms.image.vision.bean.ImageVisionResult;
2、獲取濾鏡服務實例。
Java代碼
// 獲取ImageVisionImpl對象
ImageVisionImpl imageVisionAPI = ImageVision.getInstance(this);
3、服務初始化,調用setVisionCallBack時需要實現ImageVision.VisionCallBack接口,重寫其中的onSuccess(int successCode)和onFailure(int errorCode)方法。
-
框架初始化成功后會回調onSuccess方法,在onSuccess方法中,需要再初始化濾鏡服務。調用濾鏡初始化接口時,只有通過校驗,第三方應用才能使用濾鏡服務,initCode必須為0,濾鏡服務初始化成功。
-
框架初始化失敗時會回調onFailure方法,傳回失敗錯誤碼。
imageVisionAPI.setVisionCallBack(new ImageVision.VisionCallBack() {
@Override
public void onSuccess(int successCode) {
int initCode = imageVisionAPI.init(context, authJson);
...
}
@Override
public void onFailure(int errorCode) {
...
}
});
入參authJson:
| 參數列表 |
類型 |
M/O(必選/可選) |
說明 |
|---|---|---|---|
| projectId |
String |
M |
您在配置AppGallery Connect時得到的項目ID(agconnect-services.json文件中的product_id)。 |
| appId |
String |
M |
當前App的APPID(agconnect-services.json文件中的app_id)。 |
| authApiKey |
String |
M |
鑒權使用的Apikey(agconnect-services.json文件中的api_key)。 |
| clientSecret |
String |
M |
客戶端秘鑰(agconnect-services.json文件中的client_secret)。 |
| clientId |
String |
M |
客戶端ID(agconnect-services.json文件中的client_id)。 |
| token |
String |
O |
會話token,用於驗證第三方App身份,建議由您的服務器通過client_id+client_secret從AGC獲取。 |
說明:圖文智能排版服務,圖像主題標簽服務token為必選值,獲取方式參見:token獲取方式。
4、構建參數對濾鏡服務requestJson示例:象。
| 參數列表 |
類型 |
M/O(必選/可選) |
說明 |
|---|---|---|---|
| requestJson |
JSONObject |
M |
圖片處理請求參數。 |
| imageBitmap |
Bitmap |
M |
需要處理的圖片(寬高比在1:3和3:1之間,寬高像素均不超過8000)。 |
requestJson字段信息:
| 參數列表 |
類型 |
M/O(必選/可選) |
說明 |
|---|---|---|---|
| requestId |
String |
O |
業務提供的請求ID。 |
| taskJson |
JSONObject |
M |
具體的業務請求信息。 |
| authJson |
JSONObject |
M |
鑒權參數。 |
濾鏡的taskJson字段信息:
| 參數列表 |
類型 |
M/O(必選/可選) |
說明 |
|---|---|---|---|
| filterType |
int |
O |
顏色映射的圖片索引,索引范圍[0,24](0為原圖)。 |
| intensity |
float |
O |
濾鏡強度,取值范圍[0,1.0],默認為1.0。 |
| compressRate |
float |
O |
壓縮率,取值范圍(0,1.0],默認為1.0。 |
filterType映射表:
| 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 黑白 |
棕調 |
慵懶 |
小蒼蘭 |
富士 |
桃粉 |
海鹽 |
薄荷 |
蒹葭 |
復古 |
棉花糖 |
青苔 |
| 13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 日光 |
時光 |
霧霾藍 |
向日葵 |
硬朗 |
古銅黃 |
黑白調 |
黃綠調 |
黃調 |
綠調 |
青調 |
紫調 |
authJson映射表:請參見authJson表。
濾鏡服務requestJson示例:
{
"requestId":"requestId",
"taskJson":{"intensity":"1","filterType":"1","compressRate":"1"},
"authJson":{"projectId":"projectIdTest","appId":"appIdTest","authApiKey":"authApiKeyTest","clientSecret":"CSecretTest","clientId":"CIdTest","token":"tokenTest"}
}
5、濾鏡服務獲取結果。
您在調用getColorFilter接口時,需要輸入待處理圖片的Bitmap,並選擇需要的濾鏡效果。濾鏡服務根據傳入的參數對原始圖片進行處理后,返回處理后圖片的Bitmap。
Java 代碼
// 獲取visionResult返回值
new Thread(new Runnable() {
@Override
public void run() {
ImageVisionResult visionResult = imageVisionAPI.getColorFilter(requestJson,imageBitmap);
}
}).start();
visionResult返回值:
| 參數列表 |
類型 |
M/O(必選/可選) |
說明 |
|---|---|---|---|
| resultCode |
int |
M |
|
| response |
JSONObject |
O |
服務返回的結果。 |
| image |
Bitmap |
O |
處理后的圖片數據,對於直接返回圖片的API,通過該字段傳遞處理后的圖片數據。 |
response字段信息:
| 參數列表 |
類型 |
M/O(必選/可選) |
說明 |
|---|---|---|---|
| requestId |
String |
O |
業務提供的請求id(如果請求攜帶此參數,則返回此參數值)。 |
| serviceId |
String |
M |
調用的服務名。 |
說明:調用getColorFilter接口時,需要開啟一個子線程去執行,不能在主線程執行。
6、停止服務。
當不再需要濾鏡效果時,調用該接口停止服務,stopCode為0時,停止服務成功。
if (null != imageVisionAPI) {
int stopCode = imageVisionAPI.stop();
}
圖文智能排版服務
開發步驟
圖文智能排版服務開發步驟如下,需要您提供圖片和相關參數,得到相應的返回值。
1、導入圖文智能排版服務包。
import com.huawei.hms.image.vision.bean.ImageLayoutInfo ;
import com.huawei.hms.image.vision.*;
2、獲取圖文智能排版服務實例。
// 獲取ImageVisionImpl 對象
ImageVisionImpl imageVisionAPI = ImageVision.getInstance(this);
3、服務初始化,與濾鏡服務一致,可參見開發步驟中的相關描述。
構建參數對象。
| 數列表 |
類型 |
M/O(必選/可選) |
說明 |
|---|---|---|---|
| requestJson |
JSONObject |
M |
圖片處理請求參數。 |
| imageBitmap |
Bitmap |
M |
需要制作圖文智能排版的圖片(寬高比9:16)。 |
requestJson字段信息:
| 參數列表 |
類型 |
M/O(必選/可選) |
說明 |
|---|---|---|---|
| requestId |
String |
O |
業務提供的請求ID。 |
| taskJson |
JSONObject |
M |
具體的業務請求信息。 |
| authJson |
JSONObject |
M |
鑒權參數。 |
圖文智能排版的taskJson字段信息:
| 參數列表 |
類型 |
M/O(必選/可選) |
說明 |
|---|---|---|---|
| title |
String |
M |
文案標題,必填字段,不超過7個中文漢字(總字符數量不超過10個),如果超過字數限制會被強制截斷。 |
| description |
String |
M |
文案內容,不超過44個中文漢字(總字符數量不超過66個),超過字數限制則進行截斷,用‘…’代替。 |
| copyRight |
String |
O |
圖片版權歸屬的個人/公司名稱,建議不超過7個中文漢字(總字符數量不超過10個),超過字數限制則進行截斷,用‘…’代替。 |
| anchor |
String |
O |
“詳情”或“查看更多”,建議4個中文漢字(總字符數不超過6個)超過字數限制則進行截斷,用‘…’代替。 |
| isNeedMask |
boolean |
O |
是否需要蒙層。 |
| styleList構建參數 |
JSONArray |
O |
樣式列表,默認[],若為默認值,依據描述文本是否有換行符選擇文本;若用戶傳入list,從用戶給出的版式中選擇。 取值范圍['info1', 'info2', …, 'info9']。
說明
styleList中,info8為豎板排版,當前僅支持中文版式,不支持其他語言版式;info3為默認兜底版式;若用戶輸入info8且輸入標簽、文本描述有非中文語種,返回用戶info3版式。 |
authJson映射表:請參見authJson字段定義。
圖文智能排版服務requestJson示例:
Java 代碼
{
"requestId":"requestId",
"taskJson":{"title":"輕奢新生代","description":"遠離城市的喧囂","copyRight":"華為雜志鎖屏","isNeedMask":false,"anchor":"查看詳情","styleList":["info1"]},
"authJson":{"projectId":"projectIdTest","appId":"appIdTest","authApiKey":"authApiKeyTest","clientSecret":"CSecretTest","clientId":"CIdTest","token":"tokenTest"}
}
5、圖文智能排版服務獲取結果。
// 獲取ImageLayoutInfo返回值
new Thread(new Runnable() {
@Override
public void run() {
ImageLayoutInfo imageLayoutInfo = imageVisionAPI.analyzeImageLayout(requestJson, imageBitmap);
}
}).start();
ImageLayoutInfo返回值:
| 參數列表 |
類型 |
M/O(必選/可選) |
說明 |
|---|---|---|---|
| resultCode |
int |
M |
返回結果碼。 |
| viewGroup |
ViewGroup |
O |
返回的目標view。 |
| maskView |
View |
O |
返回蒙層view(無蒙層時為null)。 |
| response |
JSONObject |
O |
返回結果。 |
response字段:
| 參數列表 |
類型 |
M/O(必選/可選) |
說明 |
|---|---|---|---|
| locationX |
int |
O |
返回view位於手機的起始位置X。 |
| locationY |
int |
O |
返回view位於手機的起始位置Y。 |
| maskColor |
int |
O |
返回蒙層的顏色值。 |
| colorHeigh |
int |
O |
返回蒙層的高度(無蒙層時為0)。 |
| requestId |
String |
O |
業務提供的請求ID(如果請求時攜帶了就返回,沒有攜帶就不返回)。 |
| serviceId |
String |
M |
調用的服務名。 |
說明:①因為接口涉及網絡請求,需要開啟子線程去調用接口。②使用圖文智能排版服務時,您需要保證提供的token是有效的,否則無法使用該服務。③token的獲取方式可參見token獲取方式。
6、停止服務。
當不再需要圖文智能排版效果時,調用該接口停止服務,stopCode為0時,執行成功。if (null != imageVisionAPI) {
int stopCode = imageVisionAPI.stop();
}
在下一篇中,將繼續帶來在應用中添加圖像裁剪能力、圖像主題標簽能力、貼紙花字能力的開發詳解,敬請期待~
原文鏈接:developer.huawei.com/consumer/cn…
原作者:胡椒
