圖像處理技術:圖像切割、標簽、貼紙花字,超細開發詳解


上一篇:圖像處理之濾鏡、圖文排版的開發詳解中,詳解了如何給應用增加圖片編輯能力中的濾鏡和圖文排版能力,今天我們繼續帶來華為圖像能力中五大圖像編輯能力的另外三大能力:圖像切割、主題標簽,以及貼紙花字,相信認真學習的同學已經可以成功打造出屬於自己的圖像編輯應用。

話不多說,直接上手!

 

圖片剪裁

開發步驟

 

編輯調整服務,圖片裁剪服務的所有接口的實現都是基於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進行操作。

Java 代碼
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、服務初始化,與濾鏡服務一致,可參見開發步驟中的相關描述。

4、構建參數對象。

參數列表

類型

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

指定標簽語言:

  • cn:代表中文

  • en:代表英文

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}。

  • 0代表OTHER

  • 1代表GOODS

  • 2代表FOOD

  • 3代表FURNITURE

  • 4代表PLANT

  • 5代表PLACE

  • 6代表FACE

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對象后,可以調用具體的邏輯方法。

-
Java 代碼
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。

代碼示例:
-
Java 代碼
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);

>>訪問華為圖像服務官網華為圖像服務開發指導文檔,了解更多相關內容

>>華為開發者聯盟官網開發指導文檔

>>華為移動服務開源倉庫地址:GitHubGitee

 

原文鏈接:developer.huawei.com/consumer/cn…

原作者:胡椒


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM