上一篇:圖像處理之濾鏡、圖文排版的開發詳解中,詳解了如何給應用增加圖片編輯能力中的濾鏡和圖文排版能力,今天我們繼續帶來華為圖像能力中五大圖像編輯能力的另外三大能力:圖像切割、主題標簽,以及貼紙花字,相信認真學習的同學已經可以成功打造出屬於自己的圖像編輯應用。
話不多說,直接上手!
圖片剪裁
開發步驟
編輯調整服務,圖片裁剪服務的所有接口的實現都是基於CropLayoutView,是一個自定義View,import的包名為com.huawei.hms.image.vision.crop.CropLayoutView,可以直接集成在layout的XML中。
1、獲取到CropLayoutView對象。
通過findViewById獲取到CropLayoutView 對象后,可以調用具體的邏輯方法。
Java 代碼
CropLayoutView cropLayoutView = findViewById(R.id.cropImageView);
2、設置需要裁剪的圖片,設置完成后,就可以對view進行操作。
cropLayoutView.setImageBitmap(inputBm);
如果需要圖片旋轉90度,則調用圖片旋轉接口。
Java 代碼
cropLayoutView.rotateClockwise();
Java 代碼
cropLayoutView.flipImageHorizontally();
如果需要圖片豎直方向鏡像,則調用圖片豎直方向鏡像接口
Java 代碼
cropLayoutView.flipImageVertically();
如果需要裁剪固定比例的圖片,則調用如下接口。
Java 代碼
cropLayoutView.setAspectRatio(ratioX, ratioY);
Java 代碼
cropLayoutView.setFixedAspectRatio(false);
如果需要裁剪矩形形狀的圖片或者橢圓形形狀的圖片,則調用如下接口。
Java 代碼
// 矩形 cropLayoutView.setCropShape(CropLayoutView.CropShape.RECTANGLE); // 橢圓形 cropLayoutView.setCropShape(CropLayoutView.CropShape.OVAL);
調整好圖片被裁剪的大小,獲取裁剪后圖片的bitmap格式。
Java 代碼
Bitmap croppedImage = cropLayoutView.getCroppedImage();
圖像主題標簽服務
開發步驟
圖像主題標簽服務開發步驟如下,需要您提供圖片和相關參數,得到相應的返回值。
1、導入圖像主題標簽服務包。
Java 代碼
import com.huawei.hms.image.vision.*;
2、獲取圖像主題標簽服務實例。
Java 代碼
// 獲取ImageVisionImpl對象
ImageVisionImpl imageVisionAPI = ImageVision.getInstance(this);
3、服務初始化,與濾鏡服務一致,可參見開發步驟中的相關描述。
參數列表 |
類型 |
M/O(必選/可選) |
說明 |
---|---|---|---|
requestJson |
JSONObject |
M |
圖片處理請求參數。 |
imageBitmap |
Bitmap |
M |
需要識別的圖片。 |
requestJson字段信息:
參數列表 |
類型 |
M/O(必選/可選) |
說明 |
---|---|---|---|
requestId |
String |
O |
業務提供的請求ID。 |
taskJson |
JSONObject |
M |
具體的業務請求信息。 |
authJson |
JSONObject |
M |
鑒權參數。 |
圖像主題標簽的taskJson字段信息如下:
參數列表 |
類型 |
M/O(必選/可選) |
說明 |
---|---|---|---|
language |
String |
M |
指定標簽語言:
|
needObjectList |
boolean |
O |
指定是否需要先返回圖片中的主體列表。 |
說明:使用圖像主題標簽服務時,您需要保證提供的token是有效的,否則無法使用該服務。
token的獲取方式參見token獲取方式。
圖像主題標簽服務requestJson示例:{ "requestId":"", "taskJson":{"language":"cn"}, "authJson":{"projectId":"projectIdTest","appId":"appIdTest","authApiKey":"authApiKeyTest","clientSecret":"CSecretTest","clientId":"CIdTest","token":"tokenTest"} }
5、圖像主題標簽服務獲取結果。
您在調用analyzeImageThemeTag接口時,需要輸入待處理圖片Bitmap等(參見構建參數對象)。此功能需要聯網,如不聯網,則返回錯誤碼。
// 獲取圖片識別結果返回值 new Thread(new Runnable() { @Override public void run() { ImageVisionResult result = imageVisionAPI.analyzeImageThemeTag(requestJson, imageBitmap); } }).start();
result返回值:
參數列表 |
類型 |
M/O(必選/可選) |
說明 |
---|---|---|---|
resultCode |
int |
M |
|
response |
JSONObject |
O |
服務返回的結果。 |
response返回值:
參數列表 |
類型 |
M/O(必選/可選) |
說明 |
---|---|---|---|
resultCode |
int |
M |
返回結果碼。 |
serviceId |
String |
O |
返回服務ID。 |
requestId |
String |
O |
返回請求ID。 |
tags |
JSONArray |
O |
返回標簽結果,見下表。 |
objectList |
JSONArray |
O |
如果傳入的needObjectList為true,則返回主體檢測結果。 |
JSONArray tags:
參數列表 |
類型 |
M/O(必選/可選) |
說明 |
---|---|---|---|
tagName |
String |
O |
標簽名。 |
tagConfidence |
float |
O |
置信度(取值0-1.0,取值越大,表示推測結果正確的可能性越大)。 |
JSONArray objectList:
參數列表 |
類型 |
M/O(必選/可選) |
說明 |
---|---|---|---|
type |
int |
O |
主體所屬的類型,取值{0,1 ... 5,6}。
|
possibility |
Float |
O |
置信度(取值0-1.0,取值越大,表示推測結果正確的可能性越大)。 |
box |
JSONObject |
O |
主體位置信息。 |
JSONObject box:
參數列表 |
類型 |
M/O(必選/可選) |
說明 |
---|---|---|---|
width |
double |
O |
主體區域寬度。 |
height |
double |
O |
主體區域高度。 |
center_x |
double |
O |
主體中心位置的橫軸坐標。 |
center_y |
double |
O |
主體中心位置的縱軸坐標。 |
說明:因為接口涉及網絡請求,需要開啟子線程去調用接口。
6、停止服務。
當不再需要主題標簽效果時,調用該接口停止服務,stopCode為0時,執行成功。
貼紙花字
開發步驟
貼紙花字服務的所有接口的實現都是基於 StickerLayout,是一個自定義View,import的包名為com.huawei.hms.image.vision.sticker.StickerLayout,直接可以集成在layout的XML中。1、獲取到StickerLayout對象。
通過findViewById獲取到StickerLayout對象后,可以調用具體的邏輯方法。
StickerLayout mStickerLayout = findViewById(R.id.sticker_container);
2、提供資源文件。
3、添加貼紙花字。
調用addSticker接口,添加貼紙花字,傳入資源文件路徑和文件名,如果返回碼為0,則為添加成功,貼紙花字總數最多可以添加50個。
int resultCode = mStickerLayout.addSticker(rootPath, fileName);
請求接口參數描述:
參數列表 |
類型 |
M/O(必選/可選) |
說明 |
---|---|---|---|
rootPath |
String |
M |
資源文件根目錄。 |
fileName |
String |
M |
如果是貼紙,需要指定的文件名,其他可以傳null。 |
addSticker(rootPath + "貼紙1", "sticker_10_editable.png"); addSticker(rootPath + "花字4", null);
5、更新花字的文本。
你可以對花字文本進行編輯,通過回調方法setStickerLayoutListener(new StickerLayout.StickerLayoutListener())獲取花字文本編輯對象textEditInfo,textEditInfo調用setText,進行文字編輯,最后mStickerLayout調用updateStickerText方法進行更新。
//獲取TextEditInfo對象 mStickerLayout.setStickerLayoutListener(new StickerLayout.StickerLayoutListener() { @Override public void onStickerLayoutClick() { } @Override public void onStickerTouch(int index) { } @Override public void onTextEdit(TextEditInfo textEditInfo) { StickerActivity.this.textEditInfo = textEditInfo; } @Override public void needDisallowInterceptTouchEvent(boolean isNeed) { } }); //更新花字文本為"花字測試"字樣 textEditInfo.setText("花字測試"); mStickerLayout.updateStickerText(textEditInfo);
>>訪問華為圖像服務官網,華為圖像服務開發指導文檔,了解更多相關內容
原文鏈接:developer.huawei.com/consumer/cn…
原作者:胡椒