2012-08-26 30 views
9

Tôi muốn có thể cho phép người dùng của mình chọn một vùng hình đa giác cụ thể (6-8 đỉnh với các đường cong giữa các điểm) của hình ảnh mà họ tải lên - làm cách nào để tôi thực hiện việc này bằng cách sử dụng HTML5 & JS? Thư viện duy nhất tôi tìm thấy cho phép lựa chọn hình chữ nhật hoàn toàn: http://odyniec.net/projects/imgareaselect/Cách chọn vùng đa giác của hình ảnh bằng JavaScript/jQuery?

+0

Có thể bạn sẽ phải tự viết, bằng cách vẽ các đường giữa các điểm mà người dùng nhấp vào. Đó không phải là khó khăn khủng khiếp nhưng một chục dòng rất cụ thể cho vấn đề của bạn. Nó có thể phụ thuộc vào những gì bạn muốn làm với đa giác của bạn. –

Trả lời

10

Đã có thư viện làm một phần của những gì bạn cần: polyclip.js, by Zoltan Dulac Bạn có thể xây dựng giao diện người dùng cho phép người dùng chọn điểm, sau đó cấp dữ liệu vào thư viện và bạn xong rồi.

EDIT: Đây là jsFiddle demonstration. Nhấn vào đây để chọn các điểm trên ảnh gốc và nhấn nút Tạo để tạo phiên bản đã cắt.

HTML:

<div id="mainContent"> 
    <div id="canvasDiv"> 
     <br/> 
     <button id="generate" type="button">Generate 
     </button> 
    </div> 
    <h1>Result:</h1> 
    <div class="clipParent" style="float:left;"> 
    </div> 
</div> 

JS:

var canvasDiv = document.getElementById('canvasDiv'); 
canvas = document.createElement('canvas'); 
canvas.setAttribute('width', 500); 
canvas.setAttribute('height', 500); 
canvas.setAttribute('id', 'canvas'); 
$(canvasDiv).prepend(canvas); 
if(typeof G_vmlCanvasManager != 'undefined') { 
    canvas = G_vmlCanvasManager.initElement(canvas); 
} 

var context = canvas.getContext('2d'); 
var imageObj = new Image(); 

imageObj.onload = function() { 
    $(canvas).attr({width : this.width, height: this.height}); 
    context.drawImage(imageObj,0,0); 
}; 
imageObj.src = 'http://www.html5canvastutorials.com/demos/assets/darth-vader.jpg'; 

var clickX = new Array(); 
var clickY = new Array(); 
var clickDrag = new Array(); 
var paint; 

function addClick(x, y, dragging) 
{ 
    clickX.push(x); 
    clickY.push(y); 
    clickDrag.push(dragging); 
} 

function redraw(){ 
    canvas.width = canvas.width; // Clears the canvas 
    context.drawImage(imageObj,0,0); 

    context.strokeStyle = "#df4b26"; 
    context.lineJoin = "round"; 
    context.lineWidth = 5; 

    for(var i=0; i < clickX.length; i++) 
    { 
    context.beginPath(); 
    context.arc(clickX[i], clickY[i], 3, 0, 2 * Math.PI, false); 
    context.fillStyle = '#ffffff'; 
    context.fill(); 
    context.lineWidth = 5; 
    context.stroke(); 
    } 
} 

$('#canvas').click(function(e){ 
    var mouseX = e.pageX - this.offsetLeft; 
    var mouseY = e.pageY - this.offsetTop; 

    addClick(e.pageX - this.offsetLeft, e.pageY - this.offsetTop); 
    redraw(); 
}); 

$('#generate').click(function(){ 
    $(".clipParent").empty(); 
    $(".clipParent").prepend('<img src="http://www.html5canvastutorials.com/demos/assets/darth-vader.jpg" id="genimg" />'); 
    var arr = []; 
    for(var i=0; i < clickX.length; i++){ 
     arr.push(clickX[i]); 
     arr.push(clickY[i]); 
    } 
    $("#genimg")[0].setAttribute("data-polyclip",arr.join(", ")); 
    clickX=[]; 
    clickY=[]; 
    redraw(); 
    polyClip.init(); 
}); 
+0

cảm ơn rất nhiều !! – user1198133

0

Bạn có thể tải các hình ảnh trên một thẻ canvas và sau đó bạn có thể làm tất cả các bản vẽ bạn thích trên vải đó.

Các vấn đề liên quan