Ответы пользователя по тегу Canvas
  • Как нарисовать на Canvas без применения putImageData()?

    madroneropaulo
    @madroneropaulo Автор вопроса
    Фронтенд разработчик
    Решил проблему следующим образом:

    var imgCanvas = document.createElement("canvas");
    var ctx = imgCanvas.getContext("2d");
    var imageObj.src = 'img/someImage.png';
    imageObj.onload = function(){   
    	ctx.draw(imageObj,0,0);
    	var imageData = ctx.getImageData(0,0,30,30);
    	var data = imageData.data;
            var countX=0;
            var countY=0;         
    	for(var i = 0, n = data.length; i < n; i += 4) {                                 
    		var red = data[i] + 50;
                    var green = data[i+1] - 50;
                    var blue = data[i+2] - 50;
                    var alpha = (data[i+3]/255).toFixed(2);
                
                    ctx.fillStyle = 'rgba('+red+','+green+','+blue+','+alpha+')'; 
                    ctx.fillRect(countX,countY,1,1);
    
                    countX++;
                    if(countX>=imageHeight){
            	         countX=0;
            	         countY++;
            	         if(countY>=imageWidth){
            		         countY=0;
            	         }                
                    }                   
    	}	
    }


    Нарисовал квадрат в каждом пиксели с помощью fillRect(). А параметры rgba взял из исходного изображения с помощью метода getImageData(). В этом примере я добавляю немного красного и убираю синего и зеленого. Alpha не меняю, но fillStyle() принимает значение alpha от 0 до 1, поэтому делится на 255. Потом изображение в canvas доступно для использования, например, с помощью toDataUrl()

    var imageUrl=imgCanvas.toDataURL(); 
        var pushImg = new Image();
        pushImg.src = imageUrl;
        pushImg.onload = function(){
          //Действия с новым изображением pushImg. 
        }
    Ответ написан