7***@qq.com
7***@qq.com
  • 发布:2017-08-25 11:36
  • 更新:2021-07-05 18:56
  • 阅读:10102

app内区域截图利用html2Canvals保存到手机

分类:HTML5+

app内区域截图利用html2Canvals保存到手机

app内有时候需要区域内的截图保存dom为图像,我们可以使用html2Canvas将dom转换成base64图像字符串,然后再利用5+api保存至app
,通用代码如下:

function saveDomImage (html2Canvas, dom, fileName) {  //使用之前要引入 html2Canvas.js  
        if(mui.os.plus){  
            if (typeof html2Canvas == null)  
                throw Error("html2Canvas is not defined");  
            if (dom == null)  
                throw Error("saveDomImage param : dom is null");  
            if (fileName == null || fileName == "")  
                fileName = "untitled.png";  

            var getPixelRatio = function(context) {  
                var backingStore = context.backingStorePixelRatio ||  
                    context.webkitBackingStorePixelRatio || 1;  
                return (window.devicePixelRatio || 1) / backingStore;  
            };  

            var _canvas = document.createElement('canvas');  

            var ctx = _canvas.getContext('2d');  
            var ratio = getPixelRatio(ctx);  
            ctx.scale(ratio,ratio);  

            var w = dom.offsetWidth;  
            var h = dom.offsetHeight;  

            _canvas.width = w;  
            _canvas.height = h;  
            _canvas.style.width = w * ratio + 'px';  
            _canvas.style.height = h * ratio + "px";  

            html2Canvas(dom, {  
                allowTaint:true,  
                logging: false,  
                profile: true,  
                useCROS: true,  
                canvas : _canvas,  
                onrendered: function (canvas) {  
                    var dataUrl = canvas.toDataURL();  
                    var b = new plus.nativeObj.Bitmap('bitblmap');  

                    b.loadBase64Data(dataUrl, function () {  
                        /*这里一定要是_doc目录*/  
                        b.save("_doc/" + fileName, {overwrite: true}, function (object) {  
                            //保存到相册  
                            plus.gallery.save("_doc/" + fileName, function () {  
                                mui.toast("图片已保存到相册");  
                            }, function () {  
                                mui.toast("图片保存失败");  
                            });  
                        }, function () {  
                            mui.toast("图片保存失败");  
                        });  
                    }, function () {  
                        mui.toast("图片保存失败");  
                    });  
                }  
            });  
        }  
    }

至于为什么要是_doc目录,本人未查实原因,hbuilder测试包可以用 _www ,但是打出来的正式包只能用 _doc。
有好心人知晓请告诉本人。

这里html2Canvas使用版本是:0.5.0-beta3。

说明:
1 ,dom元素最好是文档流定位的,用absolute 和 fixed 截取出来的有偏移, 如果想解决这个问题,可以把这个dom复制到新的无偏移(top:0 ;left:0)的dom里面,再对新dom执行保存操作。
2,保存的图片肯定是没有原图清晰的,勉强也能接受,如果图上有二维码识别, 尽量把二维码做的识别度高点。
3,本功能适合保存dom合成的图片。屏幕全截屏,保存远端img图片,mui提供更简单的方式, 请参考其他文档。

html2Canvas: http://html2canvas.hertzen.com

3 关注 分享
日王 j***@163.com 老哥教教我

要回复文章请先登录注册

dzh

dzh

回复 1***@qq.com :
我也遇到这个问题,怎么解决的?,大佬
2021-07-05 18:56
3***@qq.com

3***@qq.com

同问 “_www” 与 “_doc” 的问题
2020-01-17 10:58
1***@qq.com

1***@qq.com

请问我在安卓手机上可以,但是苹果手机就不行是为什么呢?
2019-10-14 14:50
a***@qq.com

a***@qq.com

回复 h***@163.com :
请问你这个问题结局了吗?我在安卓下也碰到了这个问题。无从下手
2019-08-02 19:21
h***@163.com

h***@163.com

plus.gallery.save 兼容性有问题,谨慎使用

在小米 MIX2S 上调用正常

在 小米4上调用报错
{"code":12,"message":"UNKOWN ERROR"}
2018-11-12 12:13
落日逢佳雨

落日逢佳雨

回复 落日逢佳雨 :
fileName为图片名且要加后缀名 我加的png相册没有检测到jpg可以
2018-10-14 17:17
落日逢佳雨

落日逢佳雨

保存成功了,但是找不到在哪里。路径应该设置为什么
2018-10-14 16:47
[已删除]

[已删除]

html2Canvas这个参数哪来的?怎么传进去?
2018-08-04 15:25
5***@qq.com

5***@qq.com

楼主,如果用mui实现长截屏要怎么一个逻辑,我查了好久没查到解决方案
2017-12-25 09:43
j***@qq.com

j***@qq.com

楼主,你有通过 jspdf.js 把图片保存为pdf吗?是否会出现图片无法显示的问题?
2017-10-27 21:24