2015-01-16 3 views
0

Учитывая черно-белое изображение, которое пользователь создал. Я хочу добавить функцию цвета.
Поскольку размер картины, которую он создал, может меняться, я установил высоту в PHP и обратил исходное изображение:Изменение цвета пикселя в черно-белом изображении

//Get img Data 
    $.ajax({ 
     url: "/_app/request.php", 
     type: "POST", 
     dataType:'json', 
     data: ({msg : message}), 
     success: function(data){ 
      $('#qroriginal').attr("src",data) 
     } 
    }); 

Внутри функции создания я использовал:

$img= imagescale($img , 200, 200); 

, а затем изменил цвет, используя палитру цветов в качестве входных данных:

//in front and back are the new rgb color values 
    var c=$('#prev'); 
    var ctx = c[0].getContext("2d"); 
    var img=$('#original'); 

    ctx.drawImage(img[0],0 ,0); 

    var imgData= ctx.getImageData(0,0, c[0].width, c[0].height); 
    //change colors 
    var i; 
    for (i = 0 ; i<imgData.data.length;i+=4){ 
     if(imgData.data[i] > 200){ 
      imgData.data[i] = front[0]; 
      imgData.data[i+1] = front[1]; 
      imgData.data[i+2] = front[2]; 
     } 
     else if(imgData.data[i] < 50){ 
      imgData.data[i] = back[0]; 
      imgData.data[i+1] = back[1]; 
      imgData.data[i+2] = back[2]; 
      imgData.data[i+3] = imgData.data[i+3]; 
     } 

Теперь проблема: Без масштабирования, значение RGB из черных уже между 245-255. Но если бы я его перемасштабировал. Я получаю некоторые значения, которые находятся между 100-150. Поэтому я не знаю, есть ли это белый или черный пиксель.
Я думал об изменении функции create в PHP или написании лучшего фильтра в javascript, глядя на соседний пиксель.

+0

Не можете ли вы сделать это наоборот, перекрасить, а затем масштабировать? Масштабирование обычно считается деструктивным процессом (данные, которые когда-то были потеряны), поэтому обычно он остается последним, что вы делаете при работе с изображениями. – GordonM

+0

Это был бы вариант, который будет работать наверняка, но я хочу сделать это на основе клиента. В противном случае я должен отправить запрос на сервер каждый раз, когда был выбран новый параметр цвета. – Pamana

+0

Вы можете сохранить копию исходного изображения на сервере и применить к нему любые изменения цвета, а затем поместить его перед отправкой. – GordonM

ответ

0

Значения между 100-150 не являются полными черными/белыми, поэтому они не близки к 255/0. Я бы предпочел взять фактор (5% или 10%), с помощью которого я добавлю значение пикселя после масштабирования. Это приведет к значительному результату .

+0

Извините, только ясность. Поэтому после перемасштабирования я должен проверить пиксель изображения и манипулировать им, прежде чем возвращаться ?. Но разве не существует той же проблемы, когда у пикселя есть цвет, который не является полным черным/белым? – Pamana

+0

Когда вы масштабируете изображение, цвета пикселей выглядят более светлыми (небольшое изображение имеет четкие границы, а масштабированный - светлые черные/серые пиксели вокруг границы). Если вы установите коэффициент 5%, чтобы увеличить цвет до более темного сторона ... она будет казаться более четкой, как если бы она появлялась в меньшем размере. – Vijay

Смежные вопросы