uniapp移动app实现将网页保存为图片到手机相册

这篇具有很好参考价值的文章主要介绍了uniapp移动app实现将网页保存为图片到手机相册。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目中新增了一个需求,将页面保存为图片,且保存在相册中。

Android端

运用到的技术点

  1. html2canvas:将网页绘制base64的图片

  1. plus.nativeObj.Bitmap:下载base64的png图片,临时存放起来

  1. uni.saveImageToPhotosAlbum:将临时存放的png图片,存放到手机相册

  1. plus.io.resolveLocalFileSystemURL:删除临时存放的图片

运用

  1. 安装html2canvas

npm install html2canvas
  1. 因为html2canvas要进行dom操作,所以我们得使用renderjs。script就要分为两部分,一个是纯的script标签块,一个是带有module、lang的script标签块

  1. 两个script块之间的通信

ownerInstance.callMethod
  1. 配置android的写入权限

android.permission.WRITE_EXTERNAL_STORAGE
  1. 开始写代码了~

<template>
    <view id="container">
        <view class="content">
            <view>
                <text class="title">{{ title }}</text>
            </view>
            <button @click="canvasToImage.generateImage">保存图片</button>
        </view>
    </view>
</template>

<script>
export default {
    data() {
        return {
            title: 'Hello',
        }
    },
    mounted() {},
    methods: {
        getSaveImg(data) {
            // console.log('base64data', data);
            let base64data = data.base64data;
            let bitmap = new plus.nativeObj.Bitmap("test");
            bitmap.loadBase64Data(base64data, function () {
                console.log("加载Base64图片数据成功");

                let url = '_downloads/test2.png';

                bitmap.save(url, {}, function (i) {
                    console.log('保存图片成功:' + JSON.stringify(i));
                    // 保存图片到相册
                    uni.saveImageToPhotosAlbum({
                        filePath: url,
                        success: function () {
                            uni.showToast({
                                title: '图片保存成功',
                                icon: 'none'
                            })
                            // 图片保存成功后,将临时保存的图片删除
                            plus.io.resolveLocalFileSystemURL(
                                url,
                                function (entry) {
                                    entry.getMetadata(function (metadata) {
                                        // console.log("fileCount=" + metadata.fileCount);
                                        entry.remove(); //删除单个文件 _downloads/改文件名

                                    });
                                },
                                function (error) {
                                    // uni.showToast({ title: "下载文件" });
                                    console.log("error" + error);
                                }
                            );
                            bitmap.clear()
                        }
                    });
                    bitmap.clear();
                }, function (e) {
                    onsole.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: {
        // 获取设备的Dpr值
        getDpr() {
            if (window.devicePixelRatio && window.devicePixelRatio > 1) {
                return window.devicePixelRatio;
            }
            return 1;
        },
            /**
       * 将传入值转为整数
       * @param value
       * @returns {number}
       */
        parseValue(value) {
            return parseInt(value, 10);
        },
        generateImage(event, ownerInstance) {
            var _this = this;

            var scanTextElem = document.getElementById('container');
            scanTextElem.style.opacity = '1';

            // 获取想要转换的dom节点
            var dom = document.getElementById('container');
            var box = window.getComputedStyle(dom);

            // dom节点计算后宽高
            var width = _this.parseValue(box.width);
            var height = _this.parseValue(box.height);

            // 获取像素比
            var scaleBy = _this.getDpr();

            // 创建自定义的canvas元素
            var canvas = document.createElement('canvas');

            // 设置canvas元素属性宽高为 DOM 节点宽高 * 像素比
            canvas.width = width * scaleBy;
            canvas.height = height * scaleBy;

            // 设置canvas css 宽高为DOM节点宽高
            canvas.style.width = width + 'px';
            canvas.style.height = height + 'px';

            // 获取画笔
            var context = canvas.getContext('2d');

            // 将所有绘制内容放大像素比倍
            context.scale(scaleBy, scaleBy);

            // 设置需要生成的图片的大小,不限于可视区域(即可保存长图)
            var w = document.getElementById('container').style.width;
            var h = document.getElementById('container').style.height;

            // 这儿的width、height一定得要有值,不然会保存失败
            html2canvas(dom, {
                allowTaint: false,
                width: window.clientWidth,
                height: window.clientHeight,
                backgroundColor:'green',
                useCORS: true
            }).then(function (canv) {
                // 将canvas转换成图片渲染到页面上
                let url = canv.toDataURL('image/png');// base64数据
                ownerInstance.callMethod('getSaveImg', {
                    base64data: url
                })
            });
        },
            
    }
}
</script>

<style>
.content {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
}

.logo {
    height: 200rpx;
    width: 200rpx;
    margin: 200rpx auto 50rpx auto;
}

.text-area {
    display: flex;
    justify-content: center;
}

.title {
    font-size: 36rpx;
    color: #8f8f94;
}
</style>

参考文档:

https://www.html5plus.org/doc/zh_cn/nativeobj.html#plus.nativeObj.Bitmap

https://uniapp.dcloud.net.cn/api/media/image.html#saveimagetophotosalbum

https://html2canvas.hertzen.com/documentation

源码链接:

https://download.csdn.net/download/weixin_42959829/87416296文章来源地址https://www.toymoban.com/news/detail-494124.html

到了这里,关于uniapp移动app实现将网页保存为图片到手机相册的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序保存图片到相册 微信小程序实现将图片保存到手机相册(方案一)

    目录 微信小程序实现将图片保存到手机相册(方案一) 微信小程序实现将图片保存到手机相册(方案二) 微信小程序之点击复制文本到剪贴板 微信小程序---判断是IOS还是安卓 微信小程序分享图片给微信好友 首先我们需要调用wx.downloadFile方法下载文件资源到本地,然后利用

    2023年04月20日
    浏览(44)
  • 微信小程序实现将图片保存到手机相册

    首先我们需要调用 wx.downloadFile 方法下载文件资源到本地,然后利用 wx.saveImageToPhotosAlbum 方法保存图片到系统相册,需要注意的是这样写很可能会因为没有权限而导致下载不了图片,所以我们最后还需要给接口一个调用失败的回调函数,以此来获取权限,最后这个小功能就实

    2024年02月11日
    浏览(68)
  • 微信小程序开发实战:实现图片保存到手机相册的方法

    随着微信小程序的普及,越来越多的人开始使用微信小程序来实现各种功能。其中,将图片保存到手机相册是一个常见的需求,但是如何实现呢?本文将介绍如何使用微信小程序实现将图片保存到手机相册,帮助大家快速掌握这一实用技能。 首先,在 data 中定义了两个变量,

    2024年02月13日
    浏览(41)
  • Android实现保存res下(drawable/mipmap)的图片到手机相册

    项目小需求需要保存二维码名片到手机相册的需求,该图片在res/mipmap或者res/drawable文件夹下,实现方法如下。 代码如下(示例): 代码如下(示例): 以上就是今天要讲的内容,本文仅仅简单介绍了在res/mipmap或者res/drawable文件夹下图片保存到手机相册的方法。

    2024年02月12日
    浏览(58)
  • uniapp 微信小程序保存图片到系统相册( 获取用户是否开启 授权保存图片到相册。)

    当用户点击拒绝按钮后的截图:   用户点击不授权  则关闭弹窗 单独给用户点击授权后, 跳转到授权页面  开启授权后:

    2024年02月08日
    浏览(55)
  • uni-app移动端-H5-微信小程序下载保存图片,文档和视频到手机,带进度条

    可移步插件地址,可直接导入hbuilderx示例项目查看: uni-app移动端-H5-微信小程序下载保存图片,文档和视频到手机,带进度条 具体代码如下

    2024年02月13日
    浏览(40)
  • uniapp-小程序保存图片到相册

    一. 将图片保存到手机相册涉及的 api 有以下几个 1. uni.getSetting (获取用户的当前设置) 2. uni.authorize (提前向用户发起授权请求。调用后会立刻弹窗询问用户是否同意授权小程序使用某项功能或获取用户的某些数据,但不会实际调用对应接口。如果用户之前已经同意授权,则不

    2024年04月22日
    浏览(38)
  • uniapp 微信小程序 实现 将base64图片保存相册和转发分享微信好友功能记录 直接cv就能用!!!!

    一、base64图片保存相册功能 提示api:that.$refs.uToast.show用的是uview2.0的toast,可以根据具体引入的ui库去更换; 二、转发分享base64图片给微信好友功能  该功能在微信开发者工具中调试的时候会一直报错,真机是没问题的,可能是编译器的bug。 其实整个wx.showShareImageMenu会拉起保

    2024年02月11日
    浏览(74)
  • 微信小程序——保存图片到手机相册(代码详解)

    首先我们要知道,如果小程序首次发起授权被拒绝之后,再次点击同一个按钮执行的wx.authorize(...)不会再弹出授权窗口。所以我们需要到引导用户到设置页面进行手动授权。 引导用户到设置页面授权的方式有两种: 第一种: 使用小程序api :wx.openSetting(...)打开设置页面 第二

    2024年02月04日
    浏览(50)
  • 在uniapp微信小程序中保存图片到本地相册

    实现在uniapp微信小程序中点击按钮,保存图片到本地相册,具体实现方法: template中 js中 手机运行:  

    2024年02月11日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包