Регулировка яркости изображения с помощью контекста холста в Microsoft Edge - PullRequest
0 голосов
/ 07 февраля 2020

Я создаю приложение, в котором мне нужно иметь возможность захватывать фрейм-захват с веб-камеры и загружать его в приложение. Для этого я использую WebRT C, чтобы захватить изображение из видеопотока, записать его на холст, а затем получить данные и загрузить их. Это прекрасно работает по большей части. Однако мне нужно было дать пользователю способ отрегулировать яркость. Чтобы выполнить это sh, я добавил на страницу ползунок с видеопотоком, который применяет "style.webkitFilter = 'яркость (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, и в версии Edge на основе хрома, однако, она НЕ работает в Edge HTML версии Edge. В этих версиях Edge видеопоток корректно отображается с настроенной яркостью, но у захваченного изображения не настроена яркость. Есть ли обходной путь, чтобы контекстные фильтры работали с Edge HTML версиями браузера Edge?

1 Ответ

1 голос
/ 10 февраля 2020

Из CanvasRenderingContext2D.filter кажется, что CanvasRenderingContext2D.filter не поддерживает браузер Microsoft Edge (версия Edge Html).

В качестве обходного пути вы можете попробовать использовать 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>

Вывод выглядит так:

enter image description here

...