bitmap.save 获取到i.target本地path 在uni-app image组件中展示不出来

bitmap.save 获取到i.target本地path 在uni-app image组件中展示不出来

开发环境 版本号 项目创建方式
uni小程序SDK iOS 16, Android Vue

产品分类

uni小程序SDK

手机系统

Android

手机系统版本号

iOS 16

手机厂商

苹果

手机机型

12 pro max

页面类型

vue

SDK版本号

4.3.6

示例代码:

<template>  
  <view>  
    <view id="container" class="content">  
      <view ref="imageDom" class="card h-200rpx">截图内容</view>  
    </view>  
    <view class="buttonArea">  
      <view class="buttonItem" @click="canvasToImage.generateImage_Share">  
        <image src="@/static/common/add-number.png" class="buttonImg"></image>  
        <view class="buttonTxt">分享给朋友</view>  
      </view>  
      <view class="buttonItem" @click="canvasToImage.generateImage">  
        <image src="@/static/common/add-number.png" class="buttonImg"></image>  
        <view class="buttonTxt">保存到相册</view>  
      </view>  
    </view>  

    <view>  
      图片成功展示哦:hellourl: {{ hellourl }}  
      <image :src="hellourl" class="buttonImg"></image>  
    </view>  

  </view>  
</template>  

<script>  
export default {  
  data() {  
    return {  
      hellourl: '',  

      data: {  
        type: '',  
        titleTime: '',  
        Slogan: []  
      },  
      info: {},  
      name: uni.getStorageSync('nickname'),  
      avatar: uni.getStorageSync('avatar')  
    }  
  },  

  mounted() {},  
  methods: {  
    getSaveImg(data) {  
      let _this = this  
      uni.showLoading({  
        mask: true  
      })  

      let base64data = data.base64data  
      _this.hellourl3 = base64data  
      let bitmap = new plus.nativeObj.Bitmap('test')  
      bitmap.loadBase64Data(  
        base64data,  
        function () {  
          console.log('加载Base64图片数据成功')  
          let time = Date.now()  
          let url = '_downloads/yflPic' + time + '.png'  
          _this.hellourl2 = url  
          uni.hideLoading()  
          bitmap.save(  
            url,  
            {},  
            function (i) {  
              console.log('保存图片成功:' + JSON.stringify(i))  
              uni.showToast({  
                title: '保存图片成功:' + JSON.stringify(i),  
                icon: 'none'  
              })  
              _this.hellourl = i.target  

              uni.uploadFile({  
                url: 'https://upload.imagedelivery.net/dY7HqO6nhLXDP8slbpx2Xw/minipgm%2Fgtl8aa%2Fcommon_image%2F1746799866936',  
                filePath: i.target,  
                name: 'file',  
                success: (uploadRes) => {  
                  uni.showToast({  
                    title: '上传成功7777' + JSON.stringify(uploadRes),  
                    icon: 'none'  
                  })  
                },  
                fail: (err) => {  
                  uni.showToast({  
                    title: '上传失败哦7777' + err,  
                    icon: 'none'  
                  })  
                }  
              })  

              uni.saveImageToPhotosAlbum({  
                filePath: url,  
                success: function () {  
                  uni.showToast({  
                    title: '图片保存成功',  
                    icon: 'none'  
                  })  
                  plus.io.resolveLocalFileSystemURL(  
                    url,  
                    function (entry) {  
                      entry.getMetadata(function (metadata) {  
                        entry.remove()  
                      })  
                    },  
                    function (error) {  
                      console.log('error' + error)  
                    }  
                  )  
                  bitmap.clear()  
                }  
              })  
              bitmap.clear()  
            },  
            function (e) {  
              console.log('保存图片失败:' + JSON.stringify(e))  
              bitmap.clear()  
            }  
          )  
        },  
        function () {  
          console.log('加载Base64图片数据失败:' + JSON.stringify(e))  
          bitmap.clear()  
        }  
      )  
    },  

    getSaveImg_Share(data) {  
      uni.showLoading({  
        mask: true  
      })  
      let base64data = data.base64data  
      let bitmap = new plus.nativeObj.Bitmap('test')  
      bitmap.loadBase64Data(  
        base64data,  
        function () {  
          console.log('加载Base64图片数据成功')  
          let time = Date.now()  
          let url = '_downloads/yflPic' + time + '.png'  
          uni.hideLoading()  
          bitmap.save(  
            url,  
            {},  
            function (i) {  
              console.log('保存图片成功:' + JSON.stringify(i))  
              uni.showToast({  
                title: '保存图片成功:' + JSON.stringify(i),  
                icon: 'none'  
              })  
            },  
            function (e) {  
              console.log('保存图片失败:' + JSON.stringify(e))  
              bitmap.clear()  
            }  
          )  
        },  
        function () {  
          console.log('加载Base64图片数据失败:' + JSON.stringify(e))  
          bitmap.clear()  
        }  
      )  
    }  
  }  
}  
</script>  

<script module="canvasToImage" lang="renderjs">  
import html2canvas from 'html2canvas';  
export default {  
    data() {  
        return {}  
    },  
    methods: {  
        getDpr() {  
            if (window.devicePixelRatio && window.devicePixelRatio > 1) {  
                return window.devicePixelRatio;  
            }  
            return 1;  
        },  

        parseValue(value) {  
            return parseInt(value, 10);  
        },  

        generateImage(event, ownerInstance) {  
            var dom = document.getElementById('container');  
            html2canvas(dom, {  
                width: dom.clientWidth,  
                height: dom.clientHeight,  
                scrollY: 0,  
                scrollX: 0,  
                useCORS: true  
            }).then(function(canv) {  
                let url = canv.toDataURL('image/jpg');  
                ownerInstance.callMethod('getSaveImg', {  
                    base64data: url  
                })  
            });  
        },  

        generateImage_Share(event, ownerInstance) {  
            var dom = document.getElementById('container');  
            html2canvas(dom, {  
                width: window.clientWidth,  
                height: window.clientHeight,  
                useCORS: true,  
                dpi: 350  
            }).then(function(canv) {  
                let url = canv.toDataURL('image/jpg');  
                ownerInstance.callMethod('getSaveImg_Share', {  
                    base64data: url,  
                })  
            });  
        },  
    }  
}  
</script>  

<style lang="scss" scoped>  
.content {  
}  

.card {  
  width: 100%;  
  background: #3f65f4;  
  .topTitle {  
    background: url('data:image/png;base64,iVBORw0K...GgoK5CYII=') no-repeat;  
    background-size: 100% 100%;  
    width: 100%;  
    height: 151px;  
    padding: 16px;  

    .title {  
      font-weight: 600;  
      font-size: 36px;  
      color: #f5f5f7;  
    }  

    .time {  
      margin-top: 15px;  
      font-weight: 500;  
      font-size: 12px;  
      color: #fff;  
    }  
  }  
}  
.buttonImg {  
  width: 100px;  
  height: 100px;  
}  
</style>  

更多关于bitmap.save 获取到i.target本地path 在uni-app image组件中展示不出来的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

uni.saveFile({
tempFilePath: i.target,
success: function (res) {
// var savedFilePath = res.savedFilePath
_this.hellourl4 = res.savedFilePath
}
}) 使用这个方法可以展示, _documents/c.jpg"、"_downloads/d.jpg" 这俩个开头的不能展示,请问为什么

更多关于bitmap.save 获取到i.target本地path 在uni-app image组件中展示不出来的实战教程也可以访问 https://www.itying.com/category-93-b0.html


而且保存成功后, 系统相册也没找到该文件,但可以在image上展示

有大哥回复下吗

根据代码分析,bitmap.save获取的本地路径在uni-app image组件中无法显示,可能有以下几个原因:

  1. 路径格式问题:bitmap.save返回的i.target路径可能是本地文件路径,但uni-app image组件需要的是支持的文件协议路径(如以file://开头)

  2. 平台差异:iOS和Android对本地文件路径的处理方式不同,需要统一处理

  3. 权限问题:保存的文件路径可能没有读取权限

建议修改方案:

  1. 在保存图片后,使用plus.io.convertLocalFileSystemURL将路径转换为可用URL:
_this.hellourl = plus.io.convertLocalFileSystemURL(i.target)
  1. 或者直接使用base64数据展示:
<image :src="'data:image/png;base64,' + base64data" mode="aspectFit"></image>
回到顶部