harmony-utils之ImageUtil,圖片相關(guān)工具類
harmony-utils 簡介與說明
harmony-utils 一款功能豐富且極易上手的HarmonyOS工具庫,借助眾多實(shí)用工具類,致力于助力開發(fā)者迅速構(gòu)建鴻蒙應(yīng)用。其封裝的工具涵蓋了APP、設(shè)備、屏幕、授權(quán)、通知、線程間通信、彈框、吐司、生物認(rèn)證、用戶首選項(xiàng)、拍照、相冊(cè)、掃碼、文件、日志、異常捕獲、字符、字符串、數(shù)字、集合、日期、隨機(jī)、base64、加密、解密、JSON等一系列的功能和作,能夠滿足各種不同的開發(fā)需求。
picker_utils 是harmony-utils拆分出來的一個(gè)子庫,包含 PickerUtil、PhotoHelper、ScanUtil。
下載安裝ohpm i @pura/harmony-utils
ohpm i @pura/picker_utils
//全局初始化方法,在UIAbility的onCreate方法中初始化 AppUtil.init()
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
AppUtil.init(this.context);
}
API方法與使用
base64ToPixelMap 圖片base64字符串轉(zhuǎn)PixelMap
let base64str = "data:image/png;base64,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";
let pixelMap = await ImageUtil.base64ToPixelMap(base64str);
pixelMapToBase64Str PixelMap轉(zhuǎn)圖片base64字符串
let pixelMap = await ImageUtil.getPixelMapFromMedia($r("app.media.test_as3"));
let base64Str = await ImageUtil.pixelMapToBase64Str(pixelMap);
savePixelMap 保存pixelMap到本地
let pixelMap = await ImageUtil.getPixelMapFromMedia($r("app.media.test_as4"));
let filePath = await ImageUtil.savePixelMap(pixelMap, FileUtil.getFilesDirPath(""), "測試圖片.png");
saveImageSource 保存ImageSource到本地
let filePath = "這里是圖片地址"
let imageSource = await ImageUtil.createImageSource(filePath);
ImageUtil.saveImageSource(imageSource, FileUtil.getFilesDirPath(""), `MZ_${DateUtil.getTodayStr()}.png`)
.then(() = > {
ToastUtil.showToast("保存成功");
});
createImageSource 創(chuàng)建圖片源實(shí)例
let filePath = "這里是圖片地址"
let imageSource = await ImageUtil.createImageSource(filePath);
let pixelMap = await imageSource.createPixelMap();
packingFromPixelMap 圖片壓縮或重新打包
let filePath = "這里是圖片地址"
let pixelMap = await ImageUtil.createImageSource(filePath).createPixelMap()
let packOpts: image.PackingOption = { format: "image/png", quality: 98 }
ImageUtil.packingFromPixelMap(pixelMap, packOpts).then((buff) = > {
LogUtil.error("buff: " + buff.byteLength);
ToastUtil.showToast("打包成功了");
});
packingFromImageSource 圖片壓縮或重新打包
let filePath = "這里是圖片地址"
let imageSource = await ImageUtil.createImageSource(filePath);
let packOpts: image.PackingOption = { format: "image/png", quality: 98 }
ImageUtil.packingFromImageSource(imageSource, packOpts).then((buff) = > {
LogUtil.error("buff: " + buff.byteLength);
ToastUtil.showToast("打包成功了");
});
packToFileFromPixelMap 將PixelMap圖片源編碼后直接打包進(jìn)文件
let filePath = "這里是圖片地址"
let pixelMap = await ImageUtil.createImageSource(this.filePath).createPixelMap();
let filePath = FileUtil.getFilesDirPath("", `MeiZi_${DateUtil.getTodayTime()}.png`);
let file = FileUtil.openSync(filePath);
let packOpts: image.PackingOption = { format: "image/png", quality: 100 }
ImageUtil.packToFileFromPixelMap(pixelMap, file.fd, packOpts).then(() = > {
FileUtil.closeSync(file.fd); //關(guān)閉文件
ToastUtil.showToast("圖片保存成功");
});
packToFileFromImageSource 將ImageSource圖片源編碼后直接打包進(jìn)文件
let filePath = "這里是圖片地址"
let imageSource = await ImageUtil.createImageSource(filePath);
let filePath = FileUtil.getFilesDirPath("", `MeiZi_${DateUtil.getTodayTime()}.png`);
let file = FileUtil.openSync(filePath);
let packOpts: image.PackingOption = { format: "image/png", quality: 100 }
ImageUtil.packToFileFromImageSource(imageSource, file.fd, packOpts).then(() = > {
FileUtil.closeSync(file.fd); //關(guān)閉文件
ToastUtil.showToast("圖片保存成功");
});
getPixelMapFromMedia 用戶獲取resource目錄下的media中的圖片PixelMap
let pixelMap = await ImageUtil.getPixelMapFromMedia($r("app.media.test_as4"));
compressedImage 圖片壓縮
let pixelMap = await ImageUtil.getPixelMapFromMedia($r("app.media.test_as5")); //原大小3.78M
let arrayBuffer = await ImageUtil.compressedImage(pixelMap, 150);
LogUtil.error("壓縮后的大小:" + arrayBuffer.byteLength);
PickerUtil.savePhoto(['壓縮后的圖片.jpeg']).then(async (uris)= >{
let uri = uris[0];
await FileUtil.writeEasy(uri,arrayBuffer,false);
ToastUtil.showToast("壓縮文件保存成功");
});
compressPhoto 圖片壓縮,返回壓縮后的圖片文件路徑
PhotoHelper.select({ maxSelectNumber: 1 }).then(async (uris) = > {
if (uris?.length > 0) {
let uri = uris[0];
let filePath = await ImageUtil.compressPhoto(uri, 100).catch((err: BusinessError) = > {
LogUtil.error("圖片壓縮異常:" + err.message);
return "";
}); //壓縮返回路徑
let oldSize = FileUtil.statSync(FileUtil.openSync(uri, fs.OpenMode.READ_ONLY).fd).size; //壓縮前大小
let compressSize = FileUtil.statSync(filePath).size; //壓縮后大小
this.resultStr = `壓縮路徑: ${filePath}nn壓縮前大小: ${FileUtil.getFormatFileSize(oldSize)}n壓縮后大小: ${FileUtil.getFormatFileSize(compressSize)}`;
LogUtil.error(this.resultStr);
}
}).catch((err: BusinessError) = > {
LogUtil.error("異常信息:" + err.message);
});
創(chuàng)作不易,請(qǐng)給童長老點(diǎn)贊
審核編輯 黃宇
-
Harmony
+關(guān)注
關(guān)注
0文章
108瀏覽量
3021
發(fā)布評(píng)論請(qǐng)先 登錄
評(píng)論