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 ...
随机推荐
- 深入理解Java虚拟机(第三版)-14. 线程安全与锁优化
14. 线程安全与锁优化 1. 什么是线程安全? 当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替进行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个 ...
- CentOS 6.5 nginx+tomcat+ssl配置
本文档用于指导在CentOS 6.5下使用nginx反向代理tomcat,并在nginx端支持ssl. 安装nginx.参见CentOS 6 nginx安装. SSL证书申请.参见腾讯SSL证书申请和 ...
- FileReader与URL.createObjectURL实现图片、视频上传前预览
之前做图片.视频上传预览常用的方案是先把文件上传到服务器,等服务器返回文件的地址后,再把该地址字符串赋给img或video的src属性,这才实现所谓的文件预览.实际上这只是文件“上传后再预览”,这既浪 ...
- 1019 General Palindromic Number (20 分)
A number that will be the same when it is written forwards or backwards is known as a Palindromic Nu ...
- 字符串截取及切割,正则表达式,expect预期交互
字符串截取及切割,正则表达式,expect预期交互 案例1:字符串截取及切割 案例2:字符串初值的处理 案例3:expe ...
- http之抽丝剥茧,深度剖析http的那些事儿
最近,小编一心扎跟学技术,毫不顾及头发的掉落速度,都快成地中海了,不过也无大碍,谁让咱是一个爱钻技术的男人呢.最近两周老是看到http,那么这个http,有哪些猫腻呢,很多同学都有这种理解,就是对于h ...
- 团队项目-运动App
一:团队成员介绍 队长:温学智 博客地址:https://www.cnblogs.com/dazhi151/ 技术型大佬,学习能力相对团队来说是最高的.并且作为班 ...
- uni-app商城项目(01)
1.项目准备: 1.新建项目,清理项目结构 2.完成项目初始化配置. 2.项目开始阶段: 1.完成tabBar配置,新建需要的页面 2.在 '/utis'封装需要的发送请求api,有利于功能的实现. ...
- Vue生成分享海报(含二维码)
本文已同步到专业技术网站 www.sufaith.com, 该网站专注于前后端开发技术与经验分享, 包含Web开发.Nodejs.Python.Linux.IT资讯等板块. 功能需求: 海报有1张背景 ...
- hive常用函数一
Hive概念 Hive最适合于数据仓库应用程序,使用该应用程序进行相关静态数据分析,不需要快速响应出结果,而数据本身不会发生频繁变化. Hdfs分布式文件系统限制了hive,使其不支持记录级别的更新. ...