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

華為開發者論壇發表於2021-07-13

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

話不多說,直接上手!

圖片剪裁

開發步驟

編輯調整服務,圖片裁剪服務的所有介面的實現都是基於 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();

調整好圖片被裁剪的大小,獲取裁剪後圖片的bitmap格式。

Java 程式碼

Bitmap croppedImage = cropLayoutView.getCroppedImage();

影像主題標籤服務

開發步驟

影像主題標籤服務開發步驟如下,需要您提供圖片和相關引數,得到相應的返回值。

1、匯入影像主題標籤服務包。

Java 程式碼

import com.huawei.hms.image.vision.*;

2、獲取影像主題標籤服務例項。

Java 程式碼

// 獲取ImageVisionImpl物件ImageVisionImpl imageVisionAPI = ImageVision.getInstance(this);

3、服務初始化,與濾鏡服務一致,可參見 開發步驟中的相關描述。

4、構建引數物件。

說明:使用影像主題標籤服務時,您需要保證提供的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返回值:

說明:因為介面涉及網路請求,需要開啟子執行緒去呼叫介面。

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);

請求介面引數描述:

程式碼示例:

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…

原作者:胡椒



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69970551/viewspace-2781004/,如需轉載,請註明出處,否則將追究法律責任。

相關文章