javascript - html2canvas 如何生成高清图片?
PHP中文网
PHP中文网 2017-04-11 11:18:32
[JavaScript讨论组]

如题,在手机上应用截图整个窗口生成canvas比较模糊,如何生成2倍尺寸的

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(3)
ringa_lee

屏幕宽度x手机屏幕分辨率
在用css把canvas的样式scale的分辨率缩小就好

function drawImage(opts) {

        if(!opts.canvas) {
            throw("A canvas is required");
        }

        // 获取canvas
        var canvas = opts.canvas,
            context = canvas.getContext('2d'),
            //image = opts.image,

        // 默认参数
            srcx = opts.srcx || 0,
            srcy = opts.srcy || 0,
            srcw = opts.srcw || image.naturalWidth,
            srch = opts.srch || image.naturalHeight,
            desx = opts.desx || srcx,
            desy = opts.desy || srcy,
            desw = opts.desw || srcw,
            desh = opts.desh || srch,
            auto = opts.auto,

        // 获取设备分辨率
            devicePixelRatio = window.devicePixelRatio || 1,
            backingStoreRatio = context.webkitBackingStorePixelRatio ||
                                context.mozBackingStorePixelRatio ||
                                context.msBackingStorePixelRatio ||
                                context.oBackingStorePixelRatio ||
                                context.backingStorePixelRatio || 1,

            ratio = devicePixelRatio / backingStoreRatio;

        // 判断canvas是否按照分辨率缩放
        if (typeof auto === 'undefined') {
            auto = true;
        }
        // upscale the canvas if the two ratios don't match
        if (auto && devicePixelRatio !== backingStoreRatio) {

            var oldWidth = canvas.width;
            var oldHeight = canvas.height;

            canvas.width = oldWidth * ratio;
            canvas.height = oldHeight * ratio;

            canvas.style.width = oldWidth + 'px';
            canvas.style.height = oldHeight + 'px';

            // now scale the context to counter
            // the fact that we've manually scaled
            // our canvas element
            context.scale(ratio, ratio);

        }

        context.drawImage(pic, srcx, srcy, srcw, srch, desx, desy, desw, desh);
    }
PHP中文网

建议使用这个rasterizeHTML.js,很不错!

大家讲道理

研究了2天,看了网上的各种回答与参考,终于解决了。下面的我的解决方案:
`

    var dom=$(".content-container .show-content"); //你要转变的dom
    var width = dom.width();
    var height = dom.height();
    var type = "png";
    var scaleBy = 3;  //缩放比例
    var canvas = document.createElement('canvas');
    canvas.width = width * scaleBy;
    canvas.height = height * scaleBy+35;  //35是我处理完后发现短了一点,具体为什么不清楚,如果你也少的话,根据自己的项目调吧
    canvas.style.width = width * scaleBy + 'px';
    canvas.style.height = height * scaleBy + 'px';
    var context = canvas.getContext('2d');
    context.scale(scaleBy, scaleBy);
    html2canvas(dom[0], {
        canvas:canvas,
        onrendered: function (canvas) {
            dom.css("display","none");//处理完后将dom隐藏,如果一开始就隐藏的话,canvas出不来,不知道大家是不是这样
            $(".img-container").append(Canvas2Image.convertToImage(canvas,width* scaleBy,height* scaleBy,type));//这是放大了很3倍的图片
            $(".img-container img").css("width",width+"px").css("height",height+"px");//在将放大的图片用css缩小,在手机上就非常清晰了
            
        }
    });`
    
    1.解决的时候有几个坑,要转变的那段html如果有margin他可能不会出现在canvas的初始位置,这就很悲剧了,由于我的需求是不显示html,而是显示转换后的图片.所以我直接把他放在没有margin的地方.
    
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号