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);
}

原文地址:https://www.cnblogs.com/laijinquan/p/11732189.html

时间: 2024-10-25 05:43:22

js html生成图片的相关文章

【原创】最近写的一个比较hack的小爬虫

目标:爬取爱漫画上面自己喜欢的一个漫画 分析阶段: 0.打开爱漫画主页,迎面就是一坨js代码..直接晕了 1.经过抓包和对html源码的分析,可以发现爱漫画通过另外一个域名发送图片,而当前域名中通过js动态生成图片的文件名.问题就在这里了,首先,图片的文件命名模式比较多,没办法通过js源码直接爬:其次,有两种不同的图片文件名表现形式,一种是字典,一种是通过运算后返回的字典字符串.所谓字典字符串,就是[a:b]变成"[a:b]". version 1: var cInfo={"

消除表情小游戏 【总结】

需求 需求分析: 按钮点击--> 生成一个icon--icon默认速度下降--中途被点击--触碰底边后抖动--失分加1--重头开始 └中途被点击--变成炸弹后抖动--得分加1--重头开始 实现思路: 生成icon:html阶段在游戏区域写好图片标签不赋值 js随机生成图片和图片位置并给图片赋值( 利用Math.random() ),写一个下降函数,每次回调判断是否被点击和是否已经到底,如果被点击执行抖动清除定时器return并重头开始,如果到底调用抖动函数抖动窗口并重头开始. 难点: 1.由于d

通过js实现随机生成图片

这次给大家分享一个通过js向HTML添加便签,实现随机代码生成的案例,代码已经放在下方,这里我在下面准备了50张图片,但是没有放在博文中,如果读者想要练习,可以自己下载一些图片,建议下载的多一些. <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta name="viewport" content="

js依赖mui.css生成图片验证码

js依赖mui.css生成图片验证码 相关css和js引入路径 https://cdnjs.cloudflare.com/ajax/libs/mui/3.7.1/css/mui.css https://cdnjs.cloudflare.com/ajax/libs/mui/3.7.1/css/mui.min.css https://cdnjs.cloudflare.com/ajax/libs/mui/3.7.1/fonts/mui.ttf https://cdnjs.cloudflare.com/

通过JS将BSAE64生成图片并下载

HTML:<div style="display:block;margin:0 auto;width:638px;height:795px;"><div id="render" >        CONTENT</div></div> <div id="template" style="margin:10px 0 0 385px;"> <input type=&

HTml js 生成图片

<script type="text/javascript"> function $(id) { return document.getElementById(id); } function textToImg() { var len = $('len').value || 30; var i = 0; var fontSize = $('fontSize').value || 15; var fontWeight = $('fontWeight').value || 'n

js生成图片

var image = new Image(); var c = document.getElementById("myCanvas"); var ctx = c.getContext("2d"); var img = document.getElementById("scream"); ctx.font = "10px Arial"; function createImg(name, zuowei, color) { //

js实现html截图生成图片

  没有华丽的开场,直入主题,这就是题主随笔风格.随笔既是日常工作积累,也可理解是个工作笔记,方便日后用到之处快速的有方可寻.   先讲一个需求场景: 定制网页截图传给服务器端保存,用户关注公众号后自动回复该截图.   想必js实现网页截图,大家第一思路是将网页转成canvas再由canvas转成base64图片.没错,我的思路也是这样,在实际开发过程中各种试错.调研也验证了该方案是最佳最便利的html转图片的方案(肯定是!没有之一).那么方案确定后,大体的实现思路也就可以往该方向去做了.由于开

js生成图片验证码

页面代码:(使用到了mui样式) <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> <meta http-equiv="Pragma" cont