1/* 2 * Copyright (c) 2022-2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15import image from '@ohos.multimedia.image' 16import photoAccessHelper from '@ohos.file.photoAccessHelper'; 17import Logger from './Logger' 18import PictureItem from '../model/PictureItem' 19import { Context } from '@ohos.abilityAccessCtrl'; 20import dataSharePredicates from '@ohos.data.dataSharePredicates'; 21import userFileManager from '@ohos.filemanagement.userFileManager'; 22 23const TAG = '[ImageModel]' 24const SPLIT_COUNT: number = 3 // 图片横竖切割的份数 25 26export default class ImageModel { 27 private phAccessHelper: photoAccessHelper.PhotoAccessHelper; 28 29 constructor(context: Context) { 30 this.phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context); 31 } 32 33 async getAllImg() { 34 let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 35 let fetchOptions: userFileManager.FetchOptions = { 36 fetchColumns: [], 37 predicates: predicates.equalTo(userFileManager.ImageVideoKey.FILE_TYPE.toString(), userFileManager.FileType.IMAGE.toString()) 38 }; 39 let mediaList: photoAccessHelper.PhotoAsset[] = []; 40 const fetchResult = await this.phAccessHelper.getAssets(fetchOptions); 41 if (fetchResult.getCount() > 0) { 42 mediaList = await fetchResult.getAllObjects(); 43 Logger.info(TAG, 'fetchResult success' + JSON.stringify(mediaList)); 44 } 45 return mediaList; 46 } 47 48 async splitPic(index: number) { 49 let imagePixelMap: PictureItem[] = [] 50 let imgDatas: photoAccessHelper.PhotoAsset[] = await this.getAllImg(); 51 let imagePackerApi = image.createImagePacker() 52 let fd = await imgDatas[index].open('r') 53 let imageSource = image.createImageSource(fd) 54 let imageInfo = await imageSource.getImageInfo() 55 Logger.info(TAG, `sizeImg createImageSource ${JSON.stringify(imageSource)}`) 56 let height = imageInfo.size.height / SPLIT_COUNT 57 for (let i = 0; i < SPLIT_COUNT; i++) { 58 for (let j = 0; j < SPLIT_COUNT; j++) { 59 let picItem: PictureItem | PixelMap | undefined = undefined; 60 if (i === SPLIT_COUNT - 1 && j === SPLIT_COUNT - 1) { 61 picItem = new PictureItem(9, undefined) 62 imagePixelMap.push(picItem) 63 } else { 64 Logger.info(TAG, `sizeImg x = ${imageInfo.size.width / SPLIT_COUNT} y = ${height}`) 65 let decodingOptions: image.DecodingOptions = { 66 desiredRegion: { 67 size: { 68 height: height, width: imageInfo.size.width / SPLIT_COUNT 69 }, x: j * imageInfo.size.width / SPLIT_COUNT, y: i * height 70 } 71 } 72 picItem = await imageSource.createPixelMap(decodingOptions) 73 imagePixelMap.push({ 74 index: i * SPLIT_COUNT + j, pixelMap: picItem 75 }) 76 } 77 } 78 } 79 imagePackerApi.release() 80 await imgDatas[index].close(fd) 81 return imagePixelMap 82 } 83}