我需要通過畫布元素將一種顏色(黑色)位圖圖像(線條藝術)應用到2色(紅色和黃色)位圖圖像(圖案)上,並且具有隻有該圖案的紅色像素才被覆蓋的線條藝術着色,有點像相交。我看到: https://developer.mozilla.org/en/docs/Web/Guide/HTML/Canvas_tutorial/Compositing(請參閱globalCompositeOperation> Darker方法),並想知道這種效果是否是我需要的。由於該方法不再支持,有沒有辦法模擬這種效果?所有用於此的圖像僅包含專色(100%紅色,100%黃色,100%黑色,100%白色)。任何導致解決方案的JavaScript代碼示例或提示都將非常棒。 Thx輸入。HTML5 Canvas |根據圖案像素顏色顯示疊加線條圖案的圖案
0
A
回答
1
如果您只能將紅色部分分離到單獨的圖像上,那麼您可以使用合成來重新着色黑色與紅色相交處。
否則,您可以使用context.getImageData
獲取兩個圖像上的所有像素顏色。
然後,您可以將紅色像素更改爲黑色,其中紅色相交爲&。
示例代碼和演示:http://jsfiddle.net/m1erickson/pcsmbr22/
<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="reset.css" /> <!-- reset css -->
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<style>
body{ background-color: ivory; margin:20px; }
canvas{border:1px solid red;}
</style>
<script>
$(function(){
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var canvasB=document.getElementById("black");
var ctxB=canvasB.getContext("2d");
var canvasC=document.getElementById("color2");
var ctxC=canvasC.getContext("2d");
ctxB.fillRect(50,50,50,100);
ctxC.fillStyle='yellow';
ctxC.fillRect(75,50,50,50);
ctxC.fillStyle='red';
ctxC.fillRect(75,100,50,50);
var iDataB=ctxB.getImageData(0,0,canvasB.width,canvasB.height);
var dataB=iDataB.data;
var iDataC=ctxC.getImageData(0,0,canvasC.width,canvasC.height);
var dataC=iDataC.data;
// copy yellow-red onto results canvas
ctx.drawImage(canvasC,0,0);
var iData=ctx.getImageData(0,0,canvas.width,canvas.height);
var data=iData.data;
// copy black pixels when intersecting red pixels
for(var i=0;i<dataC.length;i+=4){
var isBlack=(dataB[i]==0 && dataB[i+1]==0 && dataB[i+2]==0 && dataB[i+3]==255);
var isRed=(dataC[i]==255 && dataC[i+1]==0 && dataC[i+2]==0 && dataC[i+3]==255);
if(isBlack && isRed){
data[i]=0;
data[i+1]=0;
data[i+2]=0;
data[i+3]=255;
}
}
ctx.putImageData(iData,0,0);
}); // end $(function(){});
</script>
</head>
<body>
<canvas id="black" width=200 height=200></canvas>
<canvas id="color2" width=200 height=200></canvas>
<canvas id="canvas" width=200 height=200></canvas>
</body>
</html>
相關問題
- 1. 如何在FabricJs中添加圖案和圖案圖案和顏色
- 2. 圖案圖像的邊框顏色
- 3. SED/AWK:刪除圖案線條圖案
- 4. 如何使用動態圖案和顏色設置Html5 Canvas FillStyle
- 5. HTML5 Canvas疊加圖像
- 6. 背景圖案和顏色
- 7. html5-canvas圖案大小波動
- 8. 在Html5 Canvas中更改圖案大小
- 9. 圖案圖像
- 10. 從圖像生成顏色方案
- 11. 彎曲的線條圖案
- 12. Kineticjs的線條圖案
- 13. 灰色圖案
- 14. 繪製圖像並用顏色或圖案動態填充
- 15. 圖像顏色疊加在HTML5/JS
- 16. Bootstrap - 用背景顏色jumbotron重複圖案疊加
- 17. 檔案圖像
- 18. 集團通過線條線條圖案
- 19. 在QtCore.Qt.CrossPattern上設置圖案顏色和線條粗細
- 20. seaborn熱圖的顏色方案值
- 21. HTML5輸入圖案小數
- 22. HTML5畫布圖案間距
- 23. Differtent圖案顏色用於highchart
- 24. 未知圖案顏色屬性
- 25. 圖案圖像處理
- 26. 顏色疊加UIButton圖像
- 27. 刪除與圖案匹配的線條
- 28. CSS背景圖像與圖案疊加效果問題
- 29. KineticJS填充圖案
- 30. 圖案
不錯!我還發現一些代碼可以產生類似的理想,適用於包含顏色陰影的像素:http://jsfiddle.net/26N7S/3/ – koolness 2014-09-13 20:53:37