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 ...
随机推荐
- 在Centos7下搭建大数据环境,即Zookeeper+Hadoop+HBase
1. 所需软件下载链接(建议直接复制链接到迅雷下载更快): ①hadoop-2.7.6.tar.gz: wget http://mirrors.tuna.tsinghua.edu.cn/apache/ ...
- 《java编程思想》多态与接口
向上转型 定义:把某个对象的引用视为对其基类类型的引用的做法被称为向上转型方法调用绑定 将一个方法调用同一个方法主体关联起来被称作绑定. 前期绑定:程序执行前进行的绑定叫做前期绑定,前期绑定也是jav ...
- while实现2-3+4-5+6...+100 的和
while实现2-3+4-5+6...+100 的和 可以看到规律为2-100内所有奇数都为减法,偶数为加法 设定变量 total=0: count=2 当count为偶数时与total相加,反则相减 ...
- iOS - scrollView与headerView的视差滚动实现思路
假设场景:viewController里面有一个scrollView,该scrollView有一个headerView.现在需要将scrollView的滚动contentOffset与headerVi ...
- python:简单爬取自己的一篇博客文章
1.爬取文章地址:https://www.cnblogs.com/Mr-choa/p/12495157.html 爬取文章的标题.具体内容,保存到文章名.txt 代码如下: # 导入requests模 ...
- python中的两个高阶函数map()和reduce()
1.map()传入的有两个参数,函数和可迭代对象(Itreable),map()是把传入的函数依次作用于序列的每个元素,结果返回的是一个新的可迭代对象(Iterable). map()代码如下: # ...
- 1051 Pop Sequence (25分)
Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, ..., N and p ...
- 1024 Palindromic Number (25 分)
A number that will be the same when it is written forwards or backwards is known as a Palindromic Nu ...
- 1020 Tree Traversals (25 分)
Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and i ...
- 大曾Blogs使用说明书😊——Super ITZ
大曾Blogs使用说明书 先敲黑板,四句话: pipe搜索,简洁,用于跳转,博客园及csdn和github 博客园炫酷界面,用于查看主要博文 csdn所有博客汇总,查看详细信息 github项目源码汇 ...