更新记录

1.0.0(2025-03-11) 下载此版本

上传


平台兼容性

Vue2 Vue3
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
HBuilderX 3.1.0 app-vue × × × × × ×
钉钉小程序 快手小程序 飞书小程序 京东小程序 鸿蒙元服务
× × × × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari
× × × × × × × × ×

mosowe-image-heic

app 端图片格式转换

props

prop 类型 说明
outImageType string 输出图片格式,默认‘jpg’,可选‘png’
acceptType string 需要处理的图片格式及后缀,默认'heic,heif,webp'

emits

emit 说明
@progress 转换进度,参数为进度值

expose

方法 说明
heicAsync(path) promise单个图片转换,默认图片路径 path 是需要转换的,传入必转
heicListAsync(paths) promise多图片转换,会根据acceptType设置类型转换,其他则直接返回,失败不返回。

示例

<template>
  <view class="common-page">
    <view class="page-item">
      <mosowe-button @click="chooseImage">选择单个heic/heif/webp图片</mosowe-button>
    </view>
    <view class="page-item">
      <mosowe-button @click="chooseImage(3)">选择多个heic/heif/webp图片</mosowe-button>
    </view>
    <view class="h3-title">进度:{{ progress }}%</view>
    <view class="progress">
      <view
        class="slide"
        :style="`width:${progress}%`"></view>
    </view>
    <view class="page-item">
      <view class="h3-title">未处理</view>
      <template v-for="item in imageOld">
        <view class="file-path">{{ item.split('/').reverse()[0] }}</view>
        <mosowe-image
          :src="item"
          preview
          :width="200"
          :height="200"
          :round="30"></mosowe-image>
      </template>
    </view>
    <view class="page-item">
      <view class="h3-title">已处理:{{ dealTime }}s</view>
      <template v-for="item in imageDeal">
        <view class="file-path">{{ item.split('/').reverse()[0] }}</view>
        <mosowe-image
          :src="item"
          preview
          :width="200"
          :height="200"
          :round="30"></mosowe-image>
      </template>
    </view>
    <mosowe-image-convert
      ref="mosoweImageHeicRef"
      @progress="Change"></mosowe-image-convert>
  </view>
</template>

<script
  setup
  lang="ts">
  import { ref } from 'vue';
  const imageOld = ref([]);
  const imageDeal = ref([]);
  const dealTime = ref(0);
  const mosoweImageHeicRef = ref<any>(null);
  const progress = ref(0);
  const Change = (num: number) => {
    progress.value = num;
  };
  const chooseImage = (count: number = 1) => {
    dealTime.value = 0;
    imageOld.value = [];
    imageDeal.value = [];
    progress.value = 0;
    uni.chooseImage({
      count,
      success: (res) => {
        imageOld.value = res.tempFilePaths;
        uni.showLoading({
          title: '转换中...',
          mask: true
        });
        let t = Date.now();
        if (count === 1) {
          mosoweImageHeicRef.value
            ?.heicAsync(imageOld.value[0])
            .then((res) => {
              imageDeal.value = [res.data];
            })
            .catch((err) => {
              console.log('heicAsync', JSON.stringify(err));
            })
            .finally(() => {
              uni.hideLoading();
              dealTime.value = (Date.now() - t) / 1000;
            });
        } else {
          mosoweImageHeicRef.value
            ?.heicListAsync(imageOld.value)
            .then((res) => {
              imageDeal.value = res.data;
            })
            .catch((err) => {
              console.log('heicListAsync', JSON.stringify(err));
            })
            .finally(() => {
              uni.hideLoading();
              dealTime.value = (Date.now() - t) / 1000;
            });
        }
      }
    });
  };
</script>

<style
  lang="scss"
  scoped>
  .file-path {
    font-size: 28rpx;
    color: #666;
    line-height: 36rpx;
    word-break: break-all;
  }
  .progress {
    width: 100%;
    height: 8rpx;
    background-color: $uni-text-color-grey;
    border-radius: 4rpx;
    .slide {
      width: 0;
      height: 100%;
      background-color: $uni-color-primary;
      border-radius: 4rpx;
    }
  }
</style>

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问