圖片解碼

2024-02-16 13:58 更新

圖片解碼指將所支持格式的存檔圖片解碼成統(tǒng)一的PixelMap,以便在應(yīng)用或系統(tǒng)中進(jìn)行圖片顯示或圖片處理。當(dāng)前支持的存檔圖片格式包括JPEG、PNG、GIF、RAW、WebP、BMP、SVG。

開發(fā)步驟

圖片解碼相關(guān)API的詳細(xì)介紹請參見:圖片解碼接口說明。

  1. 全局導(dǎo)入Image模塊。
    1. import image from '@ohos.multimedia.image';
  2. 獲取圖片。
    • 方法一:獲取沙箱路徑。具體請參考獲取應(yīng)用文件路徑。應(yīng)用沙箱的介紹及如何向應(yīng)用沙箱推送文件,請參考文件管理。
      1. // Stage模型參考如下代碼
      2. const context = getContext(this);
      3. const filePath = context.cacheDir + '/test.jpg';
      1. // FA模型參考如下代碼
      2. import featureAbility from '@ohos.ability.featureAbility';
      3. const context = featureAbility.getContext();
      4. const filePath = context.getCacheDir() + "/test.jpg";
    • 方法二:通過沙箱路徑獲取圖片的文件描述符。具體請參考file.fs API參考文檔。

      該方法需要先導(dǎo)入@ohos.file.fs模塊。

      1. import fs from '@ohos.file.fs';

      然后調(diào)用fs.openSync()獲取文件描述符。

      1. // Stage模型參考如下代碼
      2. const context = getContext(this);
      3. const filePath = context.cacheDir + '/test.jpg';
      4. const file = fs.openSync(filePath, fs.OpenMode.READ_WRITE);
      5. const fd = file?.fd;
      1. // FA模型參考如下代碼
      2. import featureAbility from '@ohos.ability.featureAbility';
      3. const context = featureAbility.getContext();
      4. const filePath = context.getCacheDir() + "/test.jpg";
      5. const file = fs.openSync(filePath, fs.OpenMode.READ_WRITE);
      6. const fd = file?.fd;
    • 方法三:通過資源管理器獲取資源文件的ArrayBuffer。具體請參考ResourceManager API參考文檔。
      1. // Stage模型
      2. const context = getContext(this);
      3. // 獲取resourceManager資源管理器
      4. const resourceMgr = context.resourceManager;
      1. // FA模型
      2. // 導(dǎo)入resourceManager資源管理器
      3. import resourceManager from '@ohos.resourceManager';
      4. const resourceMgr = await resourceManager.getResourceManager();

      不同模型獲取資源管理器的方式不同,獲取資源管理器后,再調(diào)用resourceMgr.getRawFileContent()獲取資源文件的ArrayBuffer。

      1. const fileData = await resourceMgr.getRawFileContent('test.jpg');
      2. // 獲取圖片的ArrayBuffer
      3. const buffer = fileData.buffer;
  3. 創(chuàng)建ImageSource實例。
    • 方法一:通過沙箱路徑創(chuàng)建ImageSource。沙箱路徑可以通過步驟2的方法一獲取。
      1. // path為已獲得的沙箱路徑
      2. const imageSource = image.createImageSource(filePath);
    • 方法二:通過文件描述符fd創(chuàng)建ImageSource。文件描述符可以通過步驟2的方法二獲取。
      1. // fd為已獲得的文件描述符
      2. const imageSource = image.createImageSource(fd);
    • 方法三:通過緩沖區(qū)數(shù)組創(chuàng)建ImageSource。緩沖區(qū)數(shù)組可以通過步驟2的方法三獲取。
      1. const imageSource = image.createImageSource(buffer);
  4. 設(shè)置解碼參數(shù)DecodingOptions,解碼獲取PixelMap圖片對象。
    1. let decodingOptions = {
    2. editable: true,
    3. desiredPixelFormat: 3,
    4. }
    5. // 創(chuàng)建pixelMap并進(jìn)行簡單的旋轉(zhuǎn)和縮放
    6. const pixelMap = await imageSource.createPixelMap(decodingOptions);

    解碼完成,獲取到PixelMap對象后,可以進(jìn)行后續(xù)圖片處理

開發(fā)示例-對資源文件中的圖片進(jìn)行解碼

  1. 獲取resourceManager資源管理。
    1. const context = getContext(this);
    2. // 獲取resourceManager資源管理
    3. const resourceMgr = context.resourceManager;
  2. 獲取rawfile文件夾下test.jpg的ArrayBuffer。
    1. const fileData = await resourceMgr.getRawFileContent('test.jpg');
    2. // 獲取圖片的ArrayBuffer
    3. const buffer = fileData.buffer;
  3. 創(chuàng)建imageSource。
    1. const imageSource = image.createImageSource(buffer);
  4. 創(chuàng)建PixelMap。
    1. const pixelMap = await imageSource.createPixelMap();
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號