js html生成图片
我自己分装好的方法,外链自己去下:
/**
* !!!使用前请导入jq文件!!!
海报生成,
二维码链接生成
*/ document.write('<script src="/Public/static/qrcode.js" type="text/javascript" charset="utf-8"></script>');
document.write('<script src="/Public/static/html2canvas.js" type="text/javascript" charset="utf-8"></script>'); var scroll; /**
* 生成二维码
* @param id 容器的id,
* @param link 网站链接
* @param w 二维码宽度
* @param h 二维码高度
* @returns {Promise<any>}
*/
function code(id, link, w=128, h=128) { return new Promise((resolve, reject)=>{ var qrcode = new QRCode(id, {
text: link,
width: w,
height: h,
colorDark : "#000000",
colorLight : "#ffffff",
correctLevel : QRCode.CorrectLevel.H
}); if (qrcode._oQRCode == null)
{
reject(true);
}else {
resolve(false);
}
})
} /**
* 生成海报
* @param selector jq的选择器: #id | .class | 标签名称
* @returns {Promise<any>}
*/
function pister(selector) {
//直接选择要截图的dom,就能截图,但是因为canvas的原因,生成的图片模糊
//html2canvas(document.querySelector('div')).then(function(canvas) {
// document.body.appendChild(canvas);
//});
//创建一个新的canvas
return new Promise( (resolve, reject) => { var canvas2 = document.createElement("canvas"); let _canvas = document.querySelector(selector);
var w = parseInt(window.getComputedStyle(_canvas).width);
var h = parseInt(window.getComputedStyle(_canvas).height);
//将canvas画布放大若干倍,然后盛放在较小的容器内,就显得不模糊了
canvas2.width = w;
canvas2.height = h;
canvas2.style.width = w + "px";
canvas2.style.height = h + "px";
canvas2.dpi=window.devicePixelRatio * 4;
//可以按照自己的需求,对context的参数修改,translate指的是偏移量,scale是对绘图进行缩放,所有之后的绘图也会被缩放。定位也会被缩放。如果您 scale(2,2),那么绘图将定位于距离画布左上角两倍远的位置。
var context = canvas2.getContext("2d");
let hy = _canvas.offsetTop;
if (typeof scroll != "number")
{
scroll = 0;
}
var shy = hy - scroll; context.translate(0,-shy);
// context.scale(2, 2); html2canvas(_canvas, { canvas: canvas2 }).then(function(canvas) {
//document.body.appendChild(canvas);
//canvas转换成url,然后利用a标签的download属性,直接下载,绕过上传服务器再下载
// document.querySelector(".down").setAttribute('href', canvas.toDataURL());
var url = canvas.toDataURL();
if (url != undefined)
{
resolve(url);
}else {
reject(false);
}
});
})
} window.onscroll = function() {//为了保证兼容性,这里取两个值,哪个有值取哪一个
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
//scrollTop就是触发滚轮事件时滚轮的高度
scroll = scrollTop;
} /**
* @param code_id 放二维码的id(任意标签)
* @param link 二维码跳转网址
* @param selector 你要生成图片的html的id
* @param img_selector 海报img标签的id
* @constructor
*/
function Person(code_id, link, selector, img_selector) {
this.code_id = code_id;
this.link = link;
this.selector = selector;
this.img_selector = img_selector;
} /**
* @param w 二维码的宽度
*/
function setCodeWidth(w) {
Person.prototype.CodeWidth = w;
} /**
* @param h 二维码的高度
*/
function setCodeHeight(h) {
Person.prototype.CodeHeight = h;
} /**
* 二维码海报
* @param Person
*/
function codePister(Person) {
//二维码生成
var timea = setTimeout(() => {
var w,h;
if (Person.CodeWidth != undefined)
{
w = Person.CodeWidth;
}else {
w = document.documentElement.clientWidth * 0.2;
} if (Person.CodeHeight != undefined)
{
h = Person.CodeHeight;
}else {
h = document.documentElement.clientWidth * 0.2;
} if ($('#'+Person.code_id).children('img').length > 0)
{
$('#'+Person.code_id).children('img')[0].remove();
}
code(Person.code_id,Person.link,w,h);
clearTimeout(timea);
}, 50); //图片生成
var timeb = setTimeout(() => {
pister("#"+Person.selector).then((src)=>{
// console.log(src);
$('#'+Person.img_selector).attr('src',src)
}).catch((msg)=>{
console.log(msg);
});
clearTimeout(timeb);
},500);
} /**
* 二维码海报(推荐)
* @param Person
*/
function notice(Person) {
var timea = setTimeout(() => {
var w,h;
if (Person.CodeWidth != undefined)
{
w = Person.CodeWidth;
}else {
w = document.documentElement.clientWidth * 0.2;
} if (Person.CodeHeight != undefined)
{
h = Person.CodeHeight;
}else {
h = document.documentElement.clientWidth * 0.2;
} $('#'+Person.code_id).children().remove();
code(Person.code_id,Person.link,w,h).then( (co) => { pister("#"+Person.selector).then((cod)=>{
$('#'+Person.img_selector).attr('src',cod)
}).catch((msg)=>{
console.log(msg);
console.log('海报生成失败');
}); }).catch( (er) => {
console.log('二维码生成失败');
} );
clearTimeout(timea);
}, 50);
}
js html生成图片的更多相关文章
- 【原创】最近写的一个比较hack的小爬虫
目标:爬取爱漫画上面自己喜欢的一个漫画 分析阶段: 0.打开爱漫画主页,迎面就是一坨js代码..直接晕了 1.经过抓包和对html源码的分析,可以发现爱漫画通过另外一个域名发送图片,而当前域名中通过j ...
- webpack4-1.常见配置
参看:文档地址 视频地址:https://www.bilibili.com/video/av51693431 webpack的作用:代码转换.文件优化.代码分割.模块管理.自动刷新.代码检验.自动发布 ...
- 移动端js模拟截屏生成图片并下载功能的实现方案
一.根据PM需求如下: 移动端wap 实现将二维码生成图片下载至用户手机相册保存 二.根据现有思路: 1.使用第三方工具html2canvas,将页面中指定范围的dom转换为canvas 2.随后使用 ...
- js依赖mui.css生成图片验证码
js依赖mui.css生成图片验证码 相关css和js引入路径 https://cdnjs.cloudflare.com/ajax/libs/mui/3.7.1/css/mui.css https:/ ...
- 通过js实现随机生成图片
这次给大家分享一个通过js向HTML添加便签,实现随机代码生成的案例,代码已经放在下方,这里我在下面准备了50张图片,但是没有放在博文中,如果读者想要练习,可以自己下载一些图片,建议下载的多一些. & ...
- js 将网页内容生成图片
$(function () { $("#saveimg_btn").on("click",function (event) { event.preventDef ...
- 通过JS将BSAE64生成图片并下载
HTML:<div style="display:block;margin:0 auto;width:638px;height:795px;"><div id=& ...
- js实现html截图生成图片
没有华丽的开场,直入主题,这就是题主随笔风格.随笔既是日常工作积累,也可理解是个工作笔记,方便日后用到之处快速的有方可寻. 先讲一个需求场景: 定制网页截图传给服务器端保存,用户关注公众号后自 ...
- 调用 js 生成图片二维码
一.js 生成二维码: 首先,需要引用 jQuery 和 jquery.qrcode.js.然后: //生产二维码 $("#qrcodeCanvas").qrcode({ rend ...
随机推荐
- Codeforces题解集 1.0
记录 Codeforces 2019年12月19日到 2020年2月12日 的部分比赛题 Educational Codeforces Round 82 (Rated for Div. 2) D Fi ...
- Python itchat库(1)
一.实验环境 在cmd中输入以下命令,完成微信的API包itchat的安装. pip install itchat 注意这里有个问题,因为电脑里既有Python3.6,又有anaconda.所以一定要 ...
- 编写SpringBoot 中的AOP
编写SpringBoot 中的AOP 在程序开发的过程中会使用到AOP的思想,面向切面进行开发,比如登录的验证,记录日志等等-频繁需要操作的步骤,在遇到这种情况时就要使用Spring 的AOP了 Sp ...
- javascript 3d网页 示例 ( three.js 初探 七)
1 完整代码下载 https://pan.baidu.com/s/1JJyVcP2KqXsd5G6eaYpgHQ 提取码 3fzt (压缩包名: 2020-4-5-demo.zip) 2 图片展示 3 ...
- VUE一款适用于pc平台的简单toast
新项目要求用typescript+vue+elementui的模式来搭建pc项目,最初踩了好多坑.产品说提示不想用element-ui的提示. 打算用toast的形式.所以就自己写了一个pc的toas ...
- JavaScript 进阶入门
17:56:11 2019-08-09 如题所见 还是入门 23:10:17 2019-08-11 继续学习 16:34:59 2019-08-14 虽然入了门 但还是缺少实践 本文资料来源: 慕课网 ...
- 快速搜索多个word、excel等文件中内容
背景:要在多个文件甚至文件夹中找到文件中包含的某些内容 以win10举例: 1.打开一个文件夹 2.打开文件夹选项 3.配置搜索 4.搜索文件
- LinkedHashMap 与 HashMap 实现的区别
阅读前最好对 HashMap 的内部实现方式有一定了解 LinkedHashMap 继承自 HashMap 主要重写了一个节点类 LinkedHashMap.Entry,并维护一个头结点和尾节点 以及 ...
- python--匿名函数、文件操作
一.匿名函数 语法: sum = lambda arg1, arg2: arg1 + arg2 #调用sum函数 print "Value of total : ", sum( 1 ...
- 打造一款 刷Java 知识的小程序(二)
学习Java的神器已上线,面向广大Java爱好者! 之前写的一篇:打造一款 刷Java 知识的小程序(一) 一.第二版做了什么? 第一版小程序只具有初级展示功能,知识点都是hardcode在代码里面的 ...