鸿蒙开源三方组件(imagepicker)--图片选择器 精华

wx5b1f373d06a02
发布于 2021-7-27 13:30
浏览
2收藏

1. 介绍

imagepicker是一款用于在设备上获取照片(拍照或从相册、文件中选择)、压缩图片的开源工具库。从相册里面选择图片或者拍照获取照片、浏览选择的本地或者网络图片、保存图片。

2. 效果展示

鸿蒙开源三方组件(imagepicker)--图片选择器-鸿蒙开发者社区

3. 依赖

(1). 在工程的build.gradle的allprojects中,添加HAR所在的Maven仓地址

repositories {
	maven {
		url 'https://s01.oss.sonatype.org/content/repositories/releases/'
	}
}

(2). 在应用模块的build.gradle的dependencies闭包中,添加如下代码:

	dependencies {
		implementation 'io.github.dzsf:imagepicker:1.0.0'
	}

4. 使用说明

(1). 拍照或者从图库选择图片

    //获取单例,调用下面方法即可,具体可参考源码sample
    ImagePickerInstance.getInstance()

    /**
    * 对外图库选择图片,或者拍照选择图片方法
    * @param abilitySlice
    * @param limit  选择图片张数
    * @param isShowCamera 是否支持拍照
    * @param requestCode
    */
    public void photoSelect(AbilitySlice abilitySlice, int limit, boolean isShowCamera, int requestCode) {
        Intent intent = new Intent();
        intent.setParam(LIMIT, limit);
        intent.setParam(IS_SHOW_CAMERA, false);
        Operation operation = new Intent.OperationBuilder()
              .withDeviceId("")
              .withBundleName(abilitySlice.getBundleName())
              .withAbilityName(PhotoSelectorAbility.class)
              .build();
        intent.setOperation(operation);
        abilitySlice.startAbilityForResult(intent, requestCode);
    }

(2). 获取拍照或者图片地址

  	@Override
  	protected void onAbilityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == CAMERA_REQUEST_CODE) {
            if (resultCode == -1) {
                PhotoModel photoModel = new PhotoModel();
                try {
                    photoModel.setOriginalPath(takeImageFile.getCanonicalPath());
                } catch (IOException e) {
                    e.printStackTrace();
                }
                selected.clear();
                selected.add(photoModel);
                ok();
            }
        }
    }

(3). 浏览图片

    //获取单例,调用下面方法即可,具体可参考源码sample
    ImagePickerInstance.getInstance()

    /**
     * 对外开放的图片预览方法
     * @param context
     * @param tempList 浏览图片集合,注意!必须封装成imagepicker的bean,url支持网络或者本地
     * @param position  角标
     * @param isSave 是否支持保存
     */
    public void photoPreview(Context context, ArrayList<PhotoModel> tempList, int position, boolean isSave) {
        Intent intent = new Intent();
        intent.setSequenceableArrayListParam(PHOTOS, tempList);
        intent.setParam(POSITION, position);
        intent.setParam(IS_SAVE, isSave);
        Operation operation = new Intent.OperationBuilder()
                .withDeviceId("")
                .withBundleName(context.getBundleName())
                .withAbilityName(PhotoPreviewAbility.class)
                .build();
        intent.setOperation(operation);
        context.startAbility(intent, 0);
    }

(4). 保存图片
网络图片点击保存时,默认保存到内存卡,imagepicker文件夹下

5. 相关资料

项目地址:https://gitee.com/openneusoft/imagepicker
IDE官方下载地址:https://developer.harmonyos.com/cn/develop/deveco-studio

已于2021-7-27 13:33:37修改
3
收藏 2
回复
举报
3条回复
按时间正序
/
按时间倒序
老劉很酷
老劉很酷

丁,感谢老师提供

回复
2021-7-27 16:16:46
XY道衍
XY道衍

gooood

回复
2021-7-27 17:19:29
大秦大秦
大秦大秦

您好,通过您的4.1中的此方法

    //获取单例,调用下面方法即可,具体可参考源码sample
    ImagePickerInstance.getInstance()

    /**
    * 对外图库选择图片,或者拍照选择图片方法
    * @param abilitySlice
    * @param limit  选择图片张数
    * @param isShowCamera 是否支持拍照
    * @param requestCode
    */
    public void photoSelect(AbilitySlice abilitySlice, int limit, boolean isShowCamera, int requestCode) {
        Intent intent = new Intent();
        intent.setParam(LIMIT, limit);
        intent.setParam(IS_SHOW_CAMERA, false);
        Operation operation = new Intent.OperationBuilder()
              .withDeviceId("")
              .withBundleName(abilitySlice.getBundleName())
              .withAbilityName(PhotoSelectorAbility.class)
              .build();
        intent.setOperation(operation);
        abilitySlice.startAbilityForResult(intent, requestCode);
    }

获取到的是本机带有ability的相对路径的图片,请问有没有办法获取到绝对路径呢?应该怎么去写代码呢。

回复
2021-12-12 23:05:14
回复
    相关推荐