Tạo ứng dụng Color Picker đơn giản với HTML5 Canvas

Canvas là phần tử mới xuất hiện trong HTML5, việc hiểu rõ và sử dụng canvas sẽ giúp các bạn có thể viết được nhiều ứng dụng như games. Trong bài viết này, chúng ta sẽ tạo một ứng dụng nhỏ đơn giản về HTML5 Canvas. Với ứn

Canvas là phần tử mới xuất hiện trong HTML5, việc hiểu rõ và sử dụng canvas sẽ giúp các bạn có thể viết được nhiều ứng dụng như games. Trong bài viết này, chúng ta sẽ tạo một ứng dụng nhỏ đơn giản về HTML5 Canvas. Với ứng dụng này, các bạn có thể lấy mã màu theo HEX và RGB mà chúng ta thường gọi với cái tên là ” Color Picker “.

how-to-create-a-color-picker-with-html5-canvas

Xem Demo | Download

HTML

Tất cả phần tử html cần cho ứng dụng này là một phần tử canvas và các thẻ input cho việc hiển thị mã màu như sau :

1
2
3
canvas awidth="600" height="440" id="canvas_picker"/canvas
div id="hex"HEX: input type="text"/input/div
div id="rgb"RGB: input type="text"/input/div

JavaScript

Đầu tiên chúng ta cần khai báo biến canvas như sau :

1
var canvas = document.getElementById('canvas_picker').getContext('2d');

Kế tiếp chúng ta sẽ ấn định hình nền cho canvas như sau :

1
2
3
4
5
var img = new Image();
img.src = 'image.jpg';
$(img).load(function(){
  canvas.drawImage(img,0,0);
});

Kế đến, chúng ta sẽ cần lấy vị trí của con trỏ chuột khi chúng ta click vào canvas.

1
2
3
$('#canvas_picker').click(function(event){
var x = event.pageX - this.offsetLeft;
var y = event.pageY - this.offsetTop;

Và chúng ta sẽ lấy những mã màu từ các vị trí con trỏ chuột như sau :

1
2
3
4
var imgData = canvas.getImageData(x, y, 1, 1).data;
var R = imgData[0];
var G = imgData[1];
var B = imgData[2];

Bây giờ chúng ta sẽ lưu trữ những giá trị R, G và B vào chung một biến RGB và hiển thị nó vào các trường input.

1
2
3
var rgb = R + ',' + G + ',' + B;
  $('#rgb input').val(rgb);
});

Kế tiếp là chúng ta sẽ viết thêm 2 hàm chuyển đổi giá trị RGB sang giá trị HEX

1
2
3
4
5
6
function rgbToHex(R,G,B) {return toHex(R)+toHex(G)+toHex(B)}
function toHex(n) {
  n = parseInt(n,10);
  if (isNaN(n)) return "00";
  n = Math.max(0,Math.min(n,255));return "0123456789ABCDEF".charAt((n-n%16)/16) + "0123456789ABCDEF".charAt(n%16);
}

Full Code

Mình xin tổng hợp lại toàn bộ đoạn code cần thiết cho việc viết ứng dụng color picker như sau :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
!DOCTYPE html
html lang="en"
head
    meta charset="utf-8" /
    titleColorpicker demo/title
/head
body
 
canvas awidth="600" height="440" id="canvas_picker"/canvas
div id="hex"HEX: input type="text"/input/div
div id="rgb"RGB: input type="text"/input/div
 
script type="text/javascript"
    var canvas = document.getElementById('canvas_picker').getContext('2d');
 
    // create an image object and get it’s source
    var img = new Image();
    img.src = 'image.jpg';
 
    // copy the image to the canvas
    $(img).load(function(){
      canvas.drawImage(img,0,0);
    });
 
    function rgbToHex(R,G,B) {return toHex(R)+toHex(G)+toHex(B)}
    function toHex(n) {
      n = parseInt(n,10);
      if (isNaN(n)) return "00";
      n = Math.max(0,Math.min(n,255));
      return "0123456789ABCDEF".charAt((n-n%16)/16)  + "0123456789ABCDEF".charAt(n%16);
    }
    $('#canvas_picker').click(function(event){
      // getting user coordinates
      var x = event.pageX - this.offsetLeft;
      var y = event.pageY - this.offsetTop;
      // getting image data and RGB values
      var img_data = canvas.getImageData(x, y, 1, 1).data;
      var R = img_data[0];
      var G = img_data[1];
      var B = img_data[2];  var rgb = R + ',' + G + ',' + B;
      // convert RGB to HEX
      var hex = rgbToHex(R,G,B);
      // making the color the value of the input
      $('#rgb input').val(rgb);
      $('#hex input').val('#' + hex);
    });
/script
 
/body
/html

Mình hy vọng qua ứng dụng đơn giản này, các bạn có thể hiểu và sử dụng canvas tốt hơn cho những ứng dụng của riêng mình.

 

Code Dev

144 Blog posts

Comments