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

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

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

  1. android禁止弹出保存此图片,安卓手机相册总是出现陌生图片?教你彻底清除!...

    原标题:安卓手机相册总是出现陌生图片?教你彻底清除! 各位小伙伴们在查看手机相册时,是否经常看见一些陌生图片呢?每次删除之后也还是会出现,这该如何解决?如果你也有这样的情况出现,可能是没有将手机中的这 ...

  2. h5页面使用js实现保存当前图片到手机相册

    来源:https://bbs.csdn.net/wap/topics/392154316?from=groupmessage var triggerEvent = "touchstart&q ...

  3. Chrome浏览器网页保存成图片

    Chrome浏览器把整个网页保存成图片 1.使用快捷键 F12打开开发人员工具功能, 2.按 快捷键Ctrl + Shift + P(Mac 为 ⌘Command + ⇧Shift + P) 3.输入 ...

  4. 基于html2canvas实现网页保存为图片及图片清晰度优化

    一.实现HTML页面保存为图片 1.1 已知可行方案 现有已知能够实现网页保存为图片的方案包括: **方案1:**将DOM改写为canvas,然后利用canvas的toDataURL方法实现将DOM输 ...

  5. h5跨域访问图片_网页保存为图片及高清截图的优化 | canvas跨域图片配置

    本次技术调研来源于H5项目中的一个重要功能需求:实现微信长按网页保存为截图. 这里有个栗子(请用微信打开,长按图片即可保存):3分钟探索你的知识边界 将整个网页保存为图片是一个十分有趣的功能,常见于H ...

  6. 网页保存为图片及高清截图的优化 | canvas跨域图片配置

    本次技术调研来源于H5项目中的一个重要功能需求:实现微信长按网页保存为截图. 这里有个栗子(请用微信打开,长按图片即可保存):3分钟探索你的知识边界 将整个网页保存为图片是一个十分有趣的功能,常见于H ...

  7. 简单又实用的网页保存为图片方法

    第一步 安装360极速浏览器[如果电脑已经安装360极速浏览器,直接进入下一步].网页搜索"360极速浏览器",点击360极速浏览器官网,进行下载安装360极速浏览器. 第二步 安 ...

  8. 前端-如何将网页保存为图片

    问题重现 前台生成一张复杂的海报,海报中包含外链图片资源 问题难点 网页由多个内容组成,前端不好将整个网页保存为图片.当然,可以使用canvas进行绘图(canvas语法参考) 网页中存在外链图片资源 ...

  9. H5 -- (功能)基于html2canvas实现长按网页保存为图片到本地

    1.需求:长按页面中的一部分(里面有动态获取的用户昵称.头像及动态生成的二维码),弹出下载框,点击后将这部分保存为图片下载到手机里(如图) 2.分析:由于有动态获取数据,需等DOM元素生成之后,再将这 ...

最新文章

  1. 链表问题8——将单向链表按某值划分成左边小、中间相等、右边大的形式(初阶)
  2. 【NOIP2016提高A组模拟9.9】闭门造车
  3. Unity Mathf 数学运算(C#)
  4. dnf公共频道服务器不稳定已从初始化状态,DNF公共频道跨区列表 组队连不上必看...
  5. CV_LOAD_IMAGE_COLOR 和 CV_BGR2RGBA找不到定义
  6. ubuntu lvm mysql vg_使用LVM快照做mysql完全备份和lvm的扩容
  7. 不间断电源ups标准_UPS不间断电源除尘技巧分析
  8. 引用activity_允许其他应用启动您的 Activity
  9. CodeForces 501B - Misha and Changing Handles
  10. 与TensorFlow类似的项目有哪些?TensorFlow的优缺点是什么?
  11. linux读用户密码,linux用户/用户密码和用户组管理
  12. Element el-cascader 级联选择器详解
  13. ffmpeg 图片合成视频黑屏 不兼容问题合成MP4
  14. 语言信号处理 总复习 第三讲 *秋昊
  15. undefined is not a function
  16. Matlab学习笔记2011-09-16【数据分析】
  17. 一体化计算机接口,4.机电一体化计算机接口设计(下).ppt
  18. OJ:剪子包袱锤游戏
  19. win11下载安装及字体模糊的解决方法
  20. 团队目标由一致到分歧的案例

热门文章

  1. 领峰:使用黄金行情分析软件时需要注意的几个问题
  2. 算法篇 --- BF算法(暴力匹配算法)
  3. JAVA ( EasyExcel 通过模板 导入、导出、下载模板)——亲测有用
  4. Vue + JAVA 实现Excel的模板文件下载
  5. java程序设计基础_陈国君版第五版_第七章例题
  6. SMT贴片是干什么的?SMT贴片工艺流程介绍
  7. 可靠的消除视频、音乐中人声的方法
  8. web qq协议分析
  9. 主动变被动9个例句_云帮手,让服务器防护被动变主动,给您足够安全感
  10. GGE 双标图如何看?