Холст html5: отсечение по цвету

есть ли способ выбрать область на холсте по цвету и обрезать ее? Я хочу иметь возможность обрезать неопределенную площадь, что единственное, что общего между всеми пикселями, это то, что все они имеют одинаковый цвет. Благодарность


person Amit Hagin    schedule 08.09.2011    source источник
comment
Что вы подразумеваете под clip этим?   -  person Loktar    schedule 08.09.2011


Ответы (1)


Текущая демонстрация

Ниже приведен способ выбора цвета... и делайте с ним все, что хотите. Я передаю цвет, который хочу найти, перебирая каждый пиксель и удаляя соответствующий цвет, поскольку я не уверен, что вы имели в виду под отсечением, я предположил, что вы имеете в виду удаление. Однако учтите, что для больших изображений этот метод будет медленным.

// Takes an array with 3 color components, rgb     
function removeColor(color){
    var canvasData = ctx.getImageData(0, 0, 256, 256),
        pix = canvasData.data;

    for (var i = 0, n = pix.length; i <n; i += 4) {
        if(pix[i] === color[0] && pix[i+1] === color[1] && pix[i+2] === color[2]){
             pix[i+3] = 0;   
        }
    }

    ctx.putImageData(canvasData, 0, 0);
}

removeColor([0,0,255]); // Removes blue.

И, как указал Саймон, приведенный выше код получит точный цвет. Ниже будет получен приблизительный цвет, что хорошо, если у вас есть цвета, перекрывающиеся или очень близкие друг к другу.

Демонстрация 2 с приближением

person Loktar    schedule 08.09.2011
comment
Если рассматриваемое изображение не является идеальным по пикселям, возможно, стоит приблизить ваши условные обозначения, даже на большую величину: jsfiddle .net/CqTEV/9 - person Simon Sarris; 08.09.2011
comment
@SimonSarris да, я тоже об этом подумал, я заметил, что края не были выбраны в моем из-за растекания цвета и отбрасывания точных значений. Я добавлю вашу скрипку js к ответу и отдам вам должное. - person Loktar; 08.09.2011
comment
@Loktar Спасибо и тебе :-) - person muhammed basil; 26.12.2013