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
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组件中无法显示,可能有以下几个原因:
-
路径格式问题:bitmap.save返回的i.target路径可能是本地文件路径,但uni-app image组件需要的是支持的文件协议路径(如以
file://
开头) -
平台差异:iOS和Android对本地文件路径的处理方式不同,需要统一处理
-
权限问题:保存的文件路径可能没有读取权限
建议修改方案:
- 在保存图片后,使用plus.io.convertLocalFileSystemURL将路径转换为可用URL:
_this.hellourl = plus.io.convertLocalFileSystemURL(i.target)
- 或者直接使用base64数据展示:
<image :src="'data:image/png;base64,' + base64data" mode="aspectFit"></image>