uQrcode uniapp 微信小程序 长按保存图片+转发

主要思路:用引入插件的方式,把uQrcode隐藏起来(visibility: hidden;),等拿到生成二维码的临时路径,把临时路径放入image 里。


1.官方文档 https://uqrcode.cn/doc/guide/

根据官方文档指引 去插件市场 安装uqrcode插件

2.页面

uQrcodeLoading 和remake 在这里没用上

<template>
   <view>
                <uQrcode style="visibility: hidden;" ref="uqrcode" canvas-id="qrcode" :value="uQrcodeValue" size="200"
                         :start="true"
                         :loading="uQrcodeLoading" :auto="true" :options="uQrcodeOption" @click="remake">
                    <template v-slot:loading>
                        <u-loadmore status="loading" loading-text=" "/>
                    </template>
                </uQrcode>
                <image style="width: 100%;" mode="aspectFit" show-menu-by-longpress="true" :src="imgSrc"></image>
   </view>
</template>

<script>
    //引入uQrcode 组件。
    import uQrcode from '@/uni_modules/Sansnn-uQRCode/components/u-qrcode/u-qrcode.vue';
    
    export default {
        components: {
            uQrcode
        },
        data() {
          return{
                //二维码设置
                uQrcodeOption: {areaColor: '#FFFFFF', foregroundColor: '#04c9c7'},
                //二维码刷新
                uQrcodeLoading: false,
                //二维码值
                uQrcodeValue: "",
                //图片地址
                imgSrc: "",
                //提交信息
                submitInfo:{
                   phone:"",
                   name:""
                }
          }
        },
        onReady(){
                    var that = this;
                    uni.showLoading({
                        title: '正在生成二维码...'
                    });
                    this.uQrcodeValue = "http://baidu.com?phone=" + that.submitInfo.phone +
                        "&name=" + that.submitInfo.name + "&flag=0";
                    //二维码转化成图片
                    setTimeout(function () {
                        that.saveUqrcode();
                    }, 1000 * 5)
        },
        methods:{
           //刷新二维码
            remake() {
                this.uQrcodeValue = "http://baidu.com?phone=" + this.submitInfo.phone +
                    "&name=" + this.submitInfo.name + "&id=" + this.submitSuccess;
            },
            //长按保存二维码
            saveUqrcode() {
                var that = this;
                //pc端临时文件路径为http形式,移动端为base64
                this.$refs.uqrcode.toTempFilePath({
                    success: res => {
                        let base64 = res.tempFilePath.replace(/^data:image\/\w+;base64,/, "");//去掉data:image/png;base64,
                        var fileManager = uni.getFileSystemManager();
                        fileManager.writeFile({
                            filePath: wx.env.USER_DATA_PATH + '/img.jpg', // 指定图片的临时路径
                            data: base64, // 要写入的文本或二进制数据
                            encoding: 'base64', // 指定写入文件的字符编码
                            success: res => {
                                console.log('写入文件成功', res)
                                console.log(wx.env.USER_DATA_PATH + '/img.jpg')
                                // 保存图片到相册
                                //                       uni.saveImageToPhotosAlbum({ 
                                //                           filePath: wx.env.USER_DATA_PATH + '/img.jpg',
                                //                           success: function (res) {
                                //                               console.log('保存成功', res)
                                //                               uni.showToast({
                                //                                   title: '保存成功',
                                //                               })
                                //                           },
                                //                           fail: function (err) {
                                //                               console.log('保存失败', err)
                                //                           }
                                //                       })
                                //图片地址
                                that.imgSrc = wx.env.USER_DATA_PATH + '/img.jpg';
                                uni.hideLoading();
                            },
                            file: err => {
                                console.log('写入文件失败', err)
                            }
                        })
                    }
                });
            },
        }
    }
</script>
  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 uni.saveImageToPhotosAlbum 接口将图片保存微信小程序的本地相册中。 首先,需要在小程序app.json 中添加如下权限: ``` "permission": { "scope.writePhotosAlbum": { "desc": "保存图片到相册需要使用" } } ``` 然后,在需要保存图片的页面或组件中,可以调用 uni.saveImageToPhotosAlbum 接口,如下所示: ``` uni.saveImageToPhotosAlbum({ filePath: '图片文件路径', success: function () { console.log('保存图片到本地相册成功'); }, fail: function () { console.log('保存图片到本地相册失败'); } }); ``` 注意: - filePath 参数为图片文件的本地路径。 - uni.saveImageToPhotosAlbum 接口需要用户授权,如果用户拒绝授权,则无法保存图片到本地相册。 在用户授权后,就可以将图片保存微信小程序的本地相册中了。 ### 回答2: 在uniapp中,可以使用uni.request和uni.downloadFile这两个api来保存微信小程序中的图片到本地。 首先,我们需要将图片保存到服务器上,可以通过uni.request来完成。将图片的url传递给uni.request,并设置responseType为arraybuffer。示例代码如下: uni.request({ url: '图片url', responseType: 'arraybuffer', success: res => { // res.data即为图片的二进制数据 // 接下来将图片保存到本地 } }) 接着,我们可以通过uni.downloadFile api来将图片保存到本地。将res.data作为参数传递给uni.downloadFile的url参数,并设置保存路径filePath。示例代码如下: uni.downloadFile({ url: 'data:image/png;base64,' + uni.arrayBufferToBase64(res.data), success: res => { if (res.statusCode === 200) { // res.tempFilePath为图片保存到本地的临时文件路径 console.log(res.tempFilePath) } } }) 最后,我们可以将保存到本地的临时文件移动到用户的相册中,使用uni.saveImageToPhotosAlbum来完成。示例代码如下: uni.saveImageToPhotosAlbum({ filePath: res.tempFilePath, success: res => { console.log('保存成功') }, fail: err => { console.log('保存失败') } }) 以上就是使用uniapp微信小程序保存图片到本地的简单步骤。需要注意的是,uniapp也提供了其他的api和方法来实现保存图片的功能,可以根据具体需求选择适合的方法。 ### 回答3: uniapp是一种跨平台开发框架,可以同时开发多个平台的应用程序,包括微信小程序。在uniapp中,我们可以使用uni-app插件来实现将图片保存到本地的功能。 具体步骤如下: 1. 首先,我们需要在uniapp项目中引入uni-app插件,可以通过在项目的根目录下的`uni.xml`文件中的`easycom`节点中添加`"@dcloudio/uni-save-image"`来引入插件。 2. 在需要保存图片的页面中,使用`uni.saveImageToPhotosAlbum()`方法来保存图片到本地相册。该方法需要传入一个对象参数,其中包含要保存图片路径`filePath`和一个回调函数`success`用来处理保存成功的情况,和一个`fail`函数用来处理保存失败的情况。 3. 在回调函数中,我们可以通过判断返回值中的`errMsg`属性来判断保存是否成功,如果成功则显示保存成功的提示,否则显示保存失败的提示。 下面是一个示例代码: ``` <template> <view> <image src="/static/image.png"></image> <button @click="saveImage">保存图片</button> </view> </template> <script> export default { methods: { saveImage() { uni.saveImageToPhotosAlbum({ filePath: '/static/image.png', success(res) { uni.showToast({ title: '保存成功', icon: 'success' }); }, fail(res) { uni.showToast({ title: '保存失败', icon: 'none' }); } }); } } } </script> ``` 以上就是在uniapp微信小程序保存图片到本地的简单步骤和示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值