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 ...
随机推荐
- IOS 手动添加第三方库报错问题
当不想使用CocoaPods来管理和使用第三方库的时候,就需要手动添加和配置这些第三方库,难免会出现一些问题,主要问题汇总如下: 1.AFNetworking.NKNetWork.ZxingObjC等 ...
- spring boot 装载自定义yml文件
yml格式的配置文件感觉很人性化,所以想把项目中的.properties都替换成.yml文件,蛋疼的是springboot自1.5以后就把@configurationProperties中的locat ...
- 来讨论一下这些常见的 Redis 面试题
Redis应该算面试中必问的一个知识点,但是发现很多童鞋并不熟悉这块,这篇就常见的一些问题做一些整理,有不对的地方欢迎留言指正! 1.Redis支持的数据类型? String(字符串) 格式: set ...
- 3.Metasploit攻击流程及命令介绍
Metasploit 进阶第一讲 攻击流程及命令介绍 01.渗透测试过程环节(PTES) 1.前期交互阶段:与客户组织进行交互讨论,确定范围,目标等 2.情报搜集阶段:获取更多目标组织信 ...
- Spring Boot入门系列(十)如何使用拦截器,一学就会!
前面介绍了Spring Boot 如何整合定时任务已经Spring Boot 如何创建异步任务,不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhon ...
- Vulnhub DC-2靶机渗透
信息搜集 nmap扫描端口 nmap -sV 192.168.146.140 -p1-10000 开了80端口,那就直接访问一下把.(7744端口是ssh端口,之后会用到) 输入ip,发现url处变成 ...
- Tcl编程第三天,数学运算
1.tcl语言没有自己的数学计算,如果想要使用数学公式,必须得用C语言的库.使用方法如下. #!/usr/bin/tclsh set value [expr 8/5] puts $value set ...
- 2015蓝桥杯五星填数(C++C组)
题目:五星填数 如[图1.png]的五星图案节点填上数字:1~12,除去7和11.要求每条直线上数字和相等.如图就是恰当的填法.请你利用计算机搜索所有可能的填法有多少种.注意:旋转或镜像后相同的算同一 ...
- python selenium使用
安装selenium #Python pip install selenium #Anaconda3 conda install selenium 下载浏览器版本对应的驱动文件 chrome chro ...
- python3(二十一) pip
先确保安装了windows的Python的pip 出现上图说明安装了,命令未找到则没有安装 安装一个图形处理的第三方库 Anaconda安装第三方库 我们经常需要用到很多第三方库,如MySQL驱动程序 ...