回答
的調色板假設你有一個像HTML文檔以下內容:
<canvas id="example" width="500" height="300"></canvas>
<ul id="list">
<h3>Click the canvas to extract colors</h3>
</ul>
我已經創建了您擁有一個小提琴現成的帆布,有一些形狀和顏色,我們將在點擊時處理。我不是爲你創建一個顏色選擇器,只是列出原來的答案,並且應該作爲實現第二部分的手段。
提取的顏色的功能的列表他們的下面,我回避複製所有畫布繪製的東西,因爲它只是作爲例子,而不是通用的不夠。
var colorList = []; //This will hold all our colors
function getColors(){
var canvas = document.getElementById('example');
var context = canvas.getContext('2d');
var imageWidth = canvas.width;
var imageHeight = canvas.height;
var imageData = context.getImageData(0, 0, imageWidth, imageHeight);
var data = imageData.data;
// quickly iterate over all pixels
for(var i = 0, n = data.length; i < n; i += 4) {
var r = data[i];
var g = data[i + 1];
var b = data[i + 2];
//If you need the alpha value it's data[i + 3]
var hex = rgb2hex("rgb("+r+","+g+","+b+")");
if ($.inArray(hex, colorList) == -1){
$('#list').append("<li>"+hex+"</li>");
colorList.push(hex);
}
}
}
這將產生一個包含所有表示它們出現在你的形象(因此「看似」),如果你想有一個顏色選擇器,但您可能希望將訂單十六進制值的看似無序列表結果考慮使用colorList.sort();
這將使陣列變成黑色到白色的方式。
請注意,我正在使用rgb2hex
函數將返回的值轉換爲十六進制格式,我假設您想要,如果您確定rgb,請隨時不要使用它,函數如下:
function rgb2hex(rgb) {
rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
function hex(x) {
return ("0" + parseInt(x).toString(16)).slice(-2);
}
return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
}
和源是this,正如我所說的在代碼中的註釋,你可以很容易得提取alpha通道,如果你需要,但我拍得最通用的方案(最簡單的),我能想到的的。
這是一個很好的職位。 +1 –
謝謝@DanKanze –
使用數組時畫布的顏色可能會變得很慢(好吧,畫布上可能不會超過幾十萬像素,並且無論如何,還有不到1600萬種顏色,但我離題了)。通過一些微不足道的調整,不僅可以找到不同的顏色,還可以通過使用對象作爲字典來計算直方圖,並加快訪問速度(對於大量顏色):http://jsfiddle.net/pcZCP/2 / – JayC
- 1. HTML 5個畫布的填充顏色
- 2. 顏色沒有出現在Javascript畫布
- 3. 逆畫布顏色
- 4. HTML5畫布顏色
- 5. 的Android fingerpaint畫布顏色
- 6. 顏色以灰色在畫布
- 7. 動態在畫布中填充顏色
- 8. 將畫布顏色限制爲特定陣列
- 9. tkinter畫布顏色不變
- 10. 畫布顏色破碎?
- 11. 畫布恢復顏色
- 12. HTML5畫布顏色文本
- 13. 更改畫布顏色Android
- 14. HTML5畫布 - 更改顏色
- 15. 我如何有文字的不同顏色在HTML畫布
- 16. 流星中的獨特畫布
- 17. 動畫填充路徑在畫布中的顏色
- 18. 畫布填充顏色,保持黑色
- 19. 顏色在HTML中的有序列表
- 20. 在點上獲取畫布顏色
- 21. 的Javascript HTML畫布可變顏色的alpha通道
- 22. PHP int以獨特的rgb顏色
- 23. LINES(M)獨特的顏色Matlab
- 24. 每個用戶的獨特顏色
- 25. HTML畫布設置錯了顏色的StrokeStyle
- 26. 檢索顏色的畫布背景
- 27. Fabric.js:清除畫布的背景顏色
- 28. 懸停以更改畫布的顏色
- 29. 在沒有透明顏色的ComboBox中列出顏色
- 30. 在swift中從UIImage中找到獨特的顏色?
定義「獨特的顏色」 - > RGB/HEX顏色代碼=每種顏色都可能。 –
編輯的問題,因爲它可能是誤導 – lostsource
你可以進一步瞭解你的方法的細節?您是否試圖拍攝畫布快照,然後解析每個像素以確定RGB/HEX? –