HarmonyOS 鸿蒙Next应用沙箱中的图片如何获取到缩略图

发布于 1周前 作者 htzhanglong 来自 鸿蒙OS

HarmonyOS 鸿蒙Next应用沙箱中的图片如何获取到缩略图 请问应用沙箱中的图片如何获取到缩略图

2 回复

可参考如下链接的内容获取沙箱图片的缩略图:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/photoaccesshelper-resource-guidelines-V5#获取某张图片的缩略图
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/image-decoding-V5

应用沙箱中的图片无法获取photoAsset。沙箱图片也无法使用getThumbnail,需要参考上述链接中的内容自行实现类似效果,可根据参考代码自行调整:

import { BusinessError, request } from '@kit.BasicServicesKit';
import fileUri from '@ohos.file.fileuri';
import { image } from '@kit.ImageKit';

@Entry
@Component
struct Index {
    @State message: string = 'Hello World';
    @State param: image.PixelMap | undefined = undefined; // 阿祖图片的链接
    @State downloadUrl: string = 'https://src.leju.com/imp/imp/deal/4d/e5/0/e0a9a09a7b1835c24db4596eda2_p1_mk1_os357288.png';
    @State filePath: string = '';

    build() {
        Column() {
            Button('click').onClick(async () => {
                // 设置沙箱路径
                let filePath = getContext().cacheDir + '/Daniel' + Date.now() + '.png';
                
                // 创建下载任务
                const task = await request.downloadFile(getContext(), {
                    // 设置图片的源地址
                    url: this.downloadUrl,
                    // 设置图片存储路径
                    filePath: filePath
                });

                // 监听下载任务
                task.on('complete', () => {
                    // 保存图片的沙箱路径
                    this.filePath = filePath;
                    console.log(`转换后的路径为:${fileUri.getUriFromPath(filePath)}`);
                    
                    // 获取图片的沙箱路径
                    this.filePath = fileUri.getUriFromPath(filePath);
                    console.log(`filePath: ${this.filePath}`);
                    
                    // 创建 imageSource 示例
                    const imageSource: image.ImageSource = image.createImageSource(filePath);
                    console.log(`ImageSource: ${JSON.stringify(imageSource.getImageInfoSync())}`);
                    
                    let decodingOptions: image.DecodingOptions = {
                        sampleSize: 1,
                        editable: true,
                        desiredPixelFormat: 3,
                        desiredSize: { width: 720, height: 720 }
                    };

                    // 创建 pixelMap
                    imageSource.createPixelMap(decodingOptions).then(pixelMap: image.PixelMap => {
                        this.param = pixelMap;
                        console.log("Succeeded in creating PixelMap");
                    }).catch(err: BusinessError => {
                        console.error("Failed to create PixelMap");
                    });

                    AlertDialog.show({
                        message: '下载成功'
                    });
                });
            });

            if (this.param) {
                Image(this.param)
                    .width(400)
                    .aspectRatio(1);
            }
        }
        .width('100%')
        .height('100%')
        .justifyContent(FlexAlign.Center);
    }
}

伙伴,当前PixelMap无法转换成photoAsset,因为getThumbnail方法输出的也是PixelMap的数据,您可以基于上面提供的代码,调整desiredSize: { width: 720, height: 720 }中图片的期望输出大小,以此来实现获取期望尺寸的图片并将其作为缩略图。

let decodingOptions: image.DecodingOptions = {
  sampleSize: 1,
  editable: true,
  desiredPixelFormat: 3,
  desiredSize: { width: 720, height: 720 }
}

更多关于HarmonyOS 鸿蒙Next应用沙箱中的图片如何获取到缩略图的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)Next应用沙箱中,获取图片的缩略图通常涉及到对图片文件的读取和图像处理操作。以下是一个简要的步骤说明,不涉及Java或C语言代码:

鸿蒙系统提供了丰富的API来操作文件系统和图像处理。要获取图片的缩略图,你可以:

  1. 访问图片文件:首先,确保你的应用有权限访问存储中的图片文件。在鸿蒙系统中,这通常需要在manifest文件中声明相应的权限。

  2. 使用图片处理API:鸿蒙系统提供了图片处理的相关API,你可以使用这些API来加载图片并生成缩略图。这些API可能包括设置图片的缩放比例、裁剪区域等参数,以满足生成缩略图的需求。

  3. 显示或保存缩略图:生成缩略图后,你可以将其显示在应用的UI组件中,或者保存到存储中以供后续使用。

需要注意的是,具体的API调用和参数设置可能会根据鸿蒙系统的版本和API的更新而有所变化。因此,建议查阅最新的鸿蒙开发文档以获取最准确的信息。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html,

回到顶部