Merge remote-tracking branch 'origin/master'
这个提交包含在:
当前提交
371eecc317
@ -3,6 +3,12 @@ import fs, { ListFileOptions, ReadOptions, ReadTextOptions, WriteOptions } from
|
|||||||
import { BusinessError } from '@kit.BasicServicesKit';
|
import { BusinessError } from '@kit.BasicServicesKit';
|
||||||
import { StrHelper } from './StrHelper';
|
import { StrHelper } from './StrHelper';
|
||||||
import { hilog } from '@kit.PerformanceAnalysisKit';
|
import { hilog } from '@kit.PerformanceAnalysisKit';
|
||||||
|
import { image } from '@kit.ImageKit';
|
||||||
|
import { buffer } from '@kit.ArkTS';
|
||||||
|
import { LogHelper } from './LogHelper';
|
||||||
|
import { ToolsHelper } from './ToolsHelper';
|
||||||
|
import { photoAccessHelper } from '@kit.MediaLibraryKit';
|
||||||
|
import { GlobalContext } from '../ContextConfig';
|
||||||
|
|
||||||
export class FileHelper {
|
export class FileHelper {
|
||||||
private constructor() {
|
private constructor() {
|
||||||
@ -308,6 +314,77 @@ export class FileHelper {
|
|||||||
return fs.accessSync(path);
|
return fs.accessSync(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static getFileFd(uri: string) {
|
||||||
|
let file = FileHelper.openSync(uri, fs.OpenMode.READ_ONLY)
|
||||||
|
return file.fd
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 图片转base64
|
||||||
|
* @param photoUri
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
static BmpToBase64(photoUri: string): Promise<string> {
|
||||||
|
const imagePackerApi: image.ImagePacker = image.createImagePacker();
|
||||||
|
const packOpts: image.PackingOption = { format: 'image/jpeg', quality: 100 };
|
||||||
|
|
||||||
|
return new Promise<string>((resolve, reject) => {
|
||||||
|
let file = FileHelper.openSync(photoUri, fs.OpenMode.READ_ONLY)
|
||||||
|
const imageSource = image.createImageSource(file.fd);
|
||||||
|
LogHelper.error('file.fd:' + file.fd)
|
||||||
|
|
||||||
|
imageSource.createPixelMap().then((pixelMap) => {
|
||||||
|
imagePackerApi.packing(pixelMap, packOpts).then((data: ArrayBuffer) => {
|
||||||
|
let buf: buffer.Buffer = buffer.from(data);
|
||||||
|
LogHelper.error('data:' + data)
|
||||||
|
resolve(buf.toString('base64'))
|
||||||
|
}).catch((err: BusinessError) => {
|
||||||
|
LogHelper.error('packing failed with err: ' + JSON.stringify(err));
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
}).catch((err: BusinessError) => {
|
||||||
|
LogHelper.error('createPixelMap failed with err: ' + JSON.stringify(err));
|
||||||
|
reject(err)
|
||||||
|
});
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存图片到相册,需要注意权限
|
||||||
|
* @param pixmap
|
||||||
|
*/
|
||||||
|
static saveImage(pixmap: image.PixelMap): Promise<string> {
|
||||||
|
return new Promise<string>(async (resolve, reject) => {
|
||||||
|
|
||||||
|
let imageBuffer: ArrayBuffer = new ArrayBuffer(1);
|
||||||
|
try {
|
||||||
|
imageBuffer = await image.createImagePacker().packing(pixmap, { format: "image/png", quality: 100 });
|
||||||
|
} catch (err) {
|
||||||
|
ToolsHelper.showMessage('保存失败');
|
||||||
|
console.error(`Invoke packingPixelMap2Jpg failed, err: ${JSON.stringify(err)}`);
|
||||||
|
reject()
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const uri = await photoAccessHelper.getPhotoAccessHelper(GlobalContext.getContext())
|
||||||
|
.createAsset(photoAccessHelper.PhotoType.IMAGE, 'png');
|
||||||
|
|
||||||
|
fs.open(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
|
||||||
|
.then(async (file) => {
|
||||||
|
try {
|
||||||
|
await fs.write(file.fd, imageBuffer);
|
||||||
|
ToolsHelper.showMessage('保存成功');
|
||||||
|
} finally {
|
||||||
|
await fs.close(file.fd); // 确保文件关闭
|
||||||
|
}
|
||||||
|
resolve(uri);
|
||||||
|
}).catch(() => {
|
||||||
|
ToolsHelper.showMessage('保存失败');
|
||||||
|
reject()
|
||||||
|
return;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 打开文件,支持使用URI打开文件。使用Promise异步回调。
|
* 打开文件,支持使用URI打开文件。使用Promise异步回调。
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import { common } from '@kit.AbilityKit';
|
|||||||
import { BusinessError } from '@kit.BasicServicesKit';
|
import { BusinessError } from '@kit.BasicServicesKit';
|
||||||
import { hilog } from '@kit.PerformanceAnalysisKit';
|
import { hilog } from '@kit.PerformanceAnalysisKit';
|
||||||
import { photoAccessHelper } from '@kit.MediaLibraryKit';
|
import { photoAccessHelper } from '@kit.MediaLibraryKit';
|
||||||
|
import { LogHelper } from './LogHelper';
|
||||||
|
|
||||||
|
|
||||||
const DOCUMENT_DEFAULT_SELECT_NUMBER: number = 9; //数量
|
const DOCUMENT_DEFAULT_SELECT_NUMBER: number = 9; //数量
|
||||||
@ -65,6 +66,7 @@ export class PickerHelper {
|
|||||||
let photoPicker = new photoAccessHelper.PhotoViewPicker();
|
let photoPicker = new photoAccessHelper.PhotoViewPicker();
|
||||||
|
|
||||||
let photoSelectResult: photoAccessHelper.PhotoSelectResult = await photoPicker.select(options);
|
let photoSelectResult: photoAccessHelper.PhotoSelectResult = await photoPicker.select(options);
|
||||||
|
LogHelper.error(JSON.stringify(photoSelectResult))
|
||||||
if (photoSelectResult && photoSelectResult.photoUris && photoSelectResult.photoUris.length > 0) {
|
if (photoSelectResult && photoSelectResult.photoUris && photoSelectResult.photoUris.length > 0) {
|
||||||
return photoSelectResult.photoUris;
|
return photoSelectResult.photoUris;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -39,7 +39,7 @@ export struct SafeView {
|
|||||||
*/
|
*/
|
||||||
@Prop showBadgeRight: boolean;
|
@Prop showBadgeRight: boolean;
|
||||||
// 设置返回按钮事件,如果hideBack为true,该事件无效
|
// 设置返回按钮事件,如果hideBack为true,该事件无效
|
||||||
onBackEvent?: () => void = undefined
|
onBackEvent?: () => void
|
||||||
// 设置返回按钮事件
|
// 设置返回按钮事件
|
||||||
@Prop onClickLeft?: TitleBarBtn
|
@Prop onClickLeft?: TitleBarBtn
|
||||||
@Prop onClickRight?: TitleBarBtn
|
@Prop onClickRight?: TitleBarBtn
|
||||||
@ -57,7 +57,7 @@ export struct SafeView {
|
|||||||
this.customBuilderParam()
|
this.customBuilderParam()
|
||||||
}
|
}
|
||||||
.padding({
|
.padding({
|
||||||
top: this.isImmersive ? 0 : WindowHelper.topRectHeight + 44,
|
top: this.isImmersive ? 0 : this.hideNavBar ? 44 : WindowHelper.topRectHeight + 44,
|
||||||
bottom: this.isImmersive ? 0 : WindowHelper.bottomRectHeight
|
bottom: this.isImmersive ? 0 : WindowHelper.bottomRectHeight
|
||||||
})
|
})
|
||||||
.align(Alignment.Top)
|
.align(Alignment.Top)
|
||||||
|
|||||||
正在加载...
在新工单中引用
屏蔽一个用户