微信浏览器内兼容android iOS调取手机摄像头进行拍照、打水印、压缩、预览

实现这些功能使用了如下插件:

html部分

//调起摄像头按钮
<input type="file" id="file" accept="image/*" capture="camera">
//预览图片
<div id="fileBga"></div>
//放置压缩后图片的base64编码
<img id="fileBg" style="display:none;">


首先调取手机摄像头进行拍照

<input type="file" id="file" accept="image/*" capture="camera">

capture="camera"是为了兼容部分安卓机型。这里使用accept="image/*"而不使用accept="image/gif,image/jpeg,image/jpg,image/png,image/svg"是因为经测试华为部分机型在不使用”image/*”的时候无法调起摄像头,而是打开了文件管理器。

document.querySelector('#file').addEventListener('change', function() {
//监听input的change事件,存储用户拍摄的图片
        var file = this.files[0];
        EXIF.getData(file, function() {
            var orientation = EXIF.getTag(this, 'Orientation');
            //使用exif.js获取图片元数据
            if (orientation == 6) {
            //iOS系统拍摄图片上传的默认方向为home键在右的横屏模式
            //通过exif.js获取的图片元数据的orientation值为6,以下兼容iOS
                document.getElementById('fileBga').style.transform = 'rotate(90deg)';
                var h = $('#fileBga').height();
                var w = $('#fileBga').width();
                $('#fileBga').height(w);
                $('#fileBga').width(h);
                //旋转放置预览图片的元素,并将宽高值交换
                var rotate = function(target) {
                    //因为图片被旋转,所以调用插件其中一种canvas加水印的方法,方便打横置的水印
                    var context = target.getContext('2d');
                    var text = 'puzzle-idea';
                    var metrics = context.measureText(text);
                    var x = (target.width / 2) - (metrics.width + 24);
                    var y = (target.height / 2) + 48 * 2;

                    context.translate(x, y);
                    context.globalAlpha = 0.5;
                    context.fillStyle = '#fff';
                    context.font = '200px 微软雅黑';
                    //旋转水印
                    context.rotate(-90 * Math.PI / 180);
                    context.fillText(text, 0, 0);
                    return target;
                };

                watermark([file])
                    //开始打水印
                    .image(rotate)
                    .then(function(img) {
                        //防止多次拍摄,初始化预览图片
                        $('#fileBga').html('');
                        document.getElementById('fileBga').appendChild(img);
                        var iOSsrc = img.src;
                        lrz(iOSsrc, { width: '100%' })
                            .then(function(rst) {
                                // 处理成功会执行
                                $('#fileBg').attr('src', rst.base64);
                            })
                            .catch(function(err) {
                                // 处理失败会执行
                                console.log(err);
                            })
                    });
            } else {
                watermark([file])
                     //安卓打水印
                    .image(watermark.text.center('puzzle-idea', '200px 微软雅黑', '#fff', 0.5))
                    .then(function(img) {
                        $('#fileBga').html('');
                        document.getElementById('fileBga').appendChild(img);
                        var Androidsrc = img.src;
                        lrz(Androidsrc, { width: '100%' })
                            .then(function(rst) {
                                // 处理成功会执行
                                $('#fileBg').attr('src', rst.base64);
                            })
                            .catch(function(err) {
                                // 处理失败会执行
                                console.log(err);
                            })
                    });
            }
        });
    })
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值