【问题标题】:Adjusting the brightness of an image using canvas context in Microsoft Edge在 Microsoft Edge 中使用画布上下文调整图像的亮度
【发布时间】:2020-02-07 13:32:55
【问题描述】:

我正在构建一个应用程序,我需要能够从网络摄像头捕获帧并将其上传到应用程序。为此,我使用 WebRTC 从视频流中捕获图像,将其写入画布,然后抓取数据并上传。这在大多数情况下都可以正常工作。但是,我需要给用户一种调节亮度的方法。为此,我在页面上添加了一个带有视频流的滑块,调整时应用“style.webkitFilter = 'brightness(X%)'”。同样,这工作正常,但没有调整捕获图像的亮度,只是显示的视频流。我用来实际捕获图像的 javascript 函数是:

function takepicture() {

    var context = canvas.getContext('2d');
    var b = document.getElementById('txtBrightness').value;
    if (width && height) {
        canvas.width = width;
        canvas.height = height;
        context.filter = 'brightness(' + b + '%)';
        context.drawImage(video, 0, 0, width, height);

        var data = canvas.toDataURL();
        //photo.setAttribute('src', data);

        //alert(data);
        document.getElementById('Image').value = data;
        //$("#Image").val(data);

        $("#form1").submit();
    } else {
        clearphoto();
    }
}

这适用于 Chrome、Firefox 和基于 Chromium 的 Edge 版本,但是它不适用于 EdgeHTML 版本的 Edge。在这些版本的 Edge 中,视频流以调整后的亮度正确显示,但捕获的图像没有调整亮度。是否有使上下文过滤器与 EdgeHTML 版本的 Edge 浏览器一起使用的解决方法?

【问题讨论】:

    标签: javascript html5-canvas webrtc microsoft-edge


    【解决方案1】:

    CanvasRenderingContext2D.filter看来,CanvasRenderingContext2D.filter似乎不支持Microsoft Edge浏览器(EdgeHtml版本)。

    作为一种解决方法,您可以尝试使用 Konva 插件对图像应用滤镜。

    示例代码如下:

    <head>
        <meta charset="utf-8" />
        <title></title>
        <script src="https://unpkg.com/konva@4.1.3/konva.min.js"></script>
        <meta charset="utf-8" />
        <title>Konva Brighten Image Demo</title>
        <style>
            body {
                margin: 0;
                padding: 0;
                overflow: hidden;
                background-color: #f0f0f0;
            }
    
            #slider {
                position: absolute;
                top: 20px;
                left: 20px;
            }
        </style>
    </head>
    <body>
        <div id="container"></div>
        <input id="slider" type="range" min="-1" max="1" step="0.05" value="0" />
        <script>
            function loadImages(sources, callback) {
                var images = {};
                var loadedImages = 0;
                var numImages = 0;
                for (var src in sources) {
                    numImages++;
                }
                for (var src in sources) {
                    images[src] = new Image();
                    images[src].onload = function () {
                        if (++loadedImages >= numImages) {
                            callback(images);
                        }
                    };
                    images[src].src = sources[src];
                }
            }
            function buildStage(images) {
                var stage = new Konva.Stage({
                    container: 'container',
                    width: window.innerWidth,
                    height: window.innerHeight
                });
    
                var layer = new Konva.Layer();
    
                var lion = new Konva.Image({
                    image: images.lion,
                    x: 80,
                    y: 30,
                    draggable: true
                });
    
                lion.cache();
                lion.filters([Konva.Filters.Brighten]);
                layer.add(lion);
                stage.add(layer);
                var slider = document.getElementById('slider');
                slider.oninput = function () {
                    lion.brightness(slider.value);
                    layer.batchDraw();
                };
            }
    
            var sources = {
                lion: '/images/lion.png'
            };
    
            loadImages(sources, buildStage);
        </script>
    </body>
    

    输出如下:

    【讨论】:

      猜你喜欢
      • 2012-12-06
      • 1970-01-01
      • 1970-01-01
      • 2020-05-26
      • 2017-04-22
      • 2019-03-26
      • 2011-04-23
      • 2021-08-20
      • 1970-01-01
      相关资源
      最近更新 更多