H5 将html页面内容生成图片并上传至七牛

news/2024/7/10 23:27:58 标签: js, jquery, html5

小编最近在做项目时遇到一个问题,那就是,需要将html页面生成图片后并传给app客户端,至于为什么要传给客户端,自然是因为小编的这个项目是客户端中嵌入h5页面,故而需要和客户端内部交互。那么问题就来了,怎么将html页面生成图片,小编在网上查找资料,都是说用html2canvas,find,那就用。好嘛,用了之后发现,小编生成的图片格式为base64格式,难不成将生成的base64编码像在url后边拼接参数一样传给客户端,额…估计会炸了,所以想到将其上传至七牛,生成外部链接后将该链接传给客户端,所以,才有了这一篇笔记。话不多说,上代码。

关于html2canvas :
1、下载

  • 官网地址:http://html2canvas.hertzen.com
  • npm:npm i html2canvas

2、引入

  • 直接使用script标签引入
  • 在项目中:import html2canvas from 'html2canvas'
//html:
<div class="container">
hello,world!
</div>
<img src="" class="img"/>
//js:
//1、生成图片
function createImg(dom){
	var targetDom = document.querySelector(dom);
    var height = targetDom.scrollHeight;
    var width = targetDom.scrollWidth;
    html2canvas(targetDom, {
      useCORS: true,//是否使用跨域
      width:width,//图片宽度
      height:height,//图片高度
      backgroundColor: 'transparent'//图片背景颜色,这个属性小编要提醒一下各位童鞋,html2canvas中为background,但小编使用background进行设置背景色是行不通的,也可能是因为小编已经将页面背景的设置了颜色,所以行不通,故而使用backgroundColor设置生成的图片背景颜色才可行
    }).then(canvas => {
      let img = canvas.toDataURL('image/png');//图片格式
      $(".img").attr('src',img);
}

//2、获取上传七牛需要的token,获取的api由后台提供
function getToken(imgUrl){
    let params=  {
      bucket:"xxxxx"//上传的空间域名
    }
    $.ajax({
    	type:"POST",
    	url:"xxxxx",
    	dataType:"json",
    	data:JSON.stringify(params)
    }).then(res=>{
    	//获取到token后,do something
    })
 }

//3、将生成的图片上传至七牛
function upload(img,token){
	let imgUrl = img.split(",")[1];//因为通过html2canvas生成的图片格式为base64格式,链接为:data:image/png;base64,xxxxxxx,我们只需要传xxxxx这一段,故而进行截取
    var url = "https://upload.qiniup.com/putb64/-1/aa"; //非华东空间需要根据注意事项 1 修改上传域名
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange=function(){
      if (xhr.readyState==4){
        let data = JSON.parse(xhr.responseText);
        if(data){
        	//获取到data的数据结构:{hash:"xxxxxxx",key:"xxxxxx"}
        	//将data中的key拼接成外部可访问的链接:http://空间域名.域名/data.key      }
    }
    xhr.open("POST", url, true);
    xhr.setRequestHeader("Content-Type", "application/octet-stream");
    xhr.setRequestHeader("Authorization","UpToken "+token);
    xhr.send(imgUrl);
}

将已存在的图片上传至七牛:

//将图片转换成base64格式
function getBase64Image(img) {
     var canvas = document.createElement("canvas");
      canvas.width = img.width;
      canvas.height = img.height;
      var ctx = canvas.getContext("2d");
      ctx.drawImage(img, 0, 0, img.width, img.height);
      var dataURL = canvas.toDataURL("image/png");
     return dataURL
     // return dataURL.replace("data:image/png;base64,", "");
 }
 

function main (){
     var img = document.createElement('img');
        img.src = "../../img/logo.png";  //此处自己替换本地图片的地址
        img.onload =function() {
            var data = getBase64Image(img);
          		//获取token
        }
}

之前小编写过一篇js调用iOS Android 原生方法的文章,iOS Android通过曝露接口,js通过调用该曝露的接口来进行H5与原生iOS Android即app内部进行交互,现小编给各位童鞋推荐另一种方法,但该方法只能是原生iOS Android监听到h5 ,但h5不能监听到原生的操作。

//js:
window.location.href = url;//url为前端h5与原生商定好的,iOS Android通过监听该链接来进行下一步的操作,也许会有童鞋说,介样页面不就跳转了咩,嗯,不会,小编亲测过,小编推荐的url的demo:xxxx://yyyyy(也可以是yyyy=需要传递的数据),这样就不会跳转哦~



http://www.niftyadmin.cn/n/1202692.html

相关文章

Python虚拟环境指南2019版

这是一篇旧文&#xff0c;编写于2017年&#xff0c;用于公司内部交流。整理更新后于2019年04月06日重发&#xff0c;内容有效期乐观估计半年&#xff0c;阅读请注意保质期。 为什么用python虚拟环境 python版本差异 python当前主要有2个release版本 Python 2.7.16 和 Python 3.…

Struts 2读书笔记-----Action访问Servlet API

Action访问Servlet API Struts2中的Action并没有和任何Servlet API耦合&#xff0c;这样框架更具灵活性&#xff0c;更易测试。 对于Web应用的控制器而言&#xff0c;不访问ServletAPI是几乎不可能的。Web应用中通常需要访问的ServletAPI就是HttpServletRequest、HttpSessio…

Taro开发遇到的坑总结

1. 涉及到开发框架 ①语言框架&#xff1a; 目前使用到的开发框架主要以Vue为主&#xff0c;Taro开发提供了多种语言和框架&#xff0c;其中就有Vue&#xff0c;既然对Vue较为熟悉&#xff0c;那是否可以使用Vue为开发语言基础进行小程序的开发&#xff1f;可以是可以&#xf…

C语言之printf函数

printf() : 格式化输出,即按照某种特定格式输出特定为本基本用法(输出普通文本):printf("文本");输出变量:printf("普通文本 % 变量类型",变量);指定为宽(即指定输出文本占位列数):格式一:printf("普通文本 %[填充值]m变量类型",变量); // m指…

js下载文件、音频、视频的方式

下载文件可以直接通过a标签的href属性直接下载&#xff0c;也可以通过Blob对象转换为文件流进行下载。如果要对大数据量或者需要分片下载、上传等操作&#xff0c;可以考虑Blob对象。同事Blob对象可以对下载过程进行额外操作&#xff08;拦截等操作&#xff09;&#xff0c;这是…

Windows 10 又在生产环境进行测试?微软:发错了

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; 微软又双叒叕捅娄子了……最近&#xff0c;不少国外网友反映&#xff0c;自己的Windows 10系统突然收到了几条很诡异的通知&#xff0c;乍一看像是来自恶意软件甚至病毒&#xff0c;结果是微软自…

Vue 仿蚂蚁森林能量球生成获取组件

小编最近刚刚结束了一个需求&#xff0c;需求是这样的&#xff1a;通过做任务生成一定的太阳&#xff0c;领取太阳后达到一定等级树苗进行生长。嗯&#xff1f;听起来是不是觉得很熟悉&#xff1f;是的&#xff0c;小编就想到了蚂蚁森林&#xff0c;不知道各位同学获取到多少个…

深度解析RocketMQ消息发送的高可用设计

2019独角兽企业重金招聘Python工程师标准>>> 微信公众号「后端进阶」&#xff0c;专注后端技术分享&#xff1a;Java、Golang、WEB框架、分布式中间件、服务治理等等。 老司机倾囊相授&#xff0c;带你一路进阶&#xff0c;来不及解释了快上车&#xff01; 从rocket…