$(document).ready(function(){ var binary_level = 100 var url = document.location.origin var cropper = null var snap = null Cropper.setDefaults({ viewMode: 1, autoCropArea: 0.9 }) // Grab elements, create settings, etc. var canvas = document.getElementById('canvas'); var context = canvas.getContext('2d'); var video = document.getElementById('video'); var mediaConfig = { video: true }; var errBack = function(e) { console.log('An error has occurred!', e) }; /** Take a new snapshot from the camera and store it **/ function doSnap(){ cropper && cropper.destroy() let width = video.width let height = video.height context.drawImage(video, 0, 0, width, height); snap = context.createImageData(width, height); snap.data.set( context.getImageData(0, 0, width, height).data ) binary(context) $("#result").show() // Animation removed: it was causing problems with the send button. Fix. //$('html, body').animate({scrollTop: $("#result").offset().top}, 2000); cropper = new Cropper(canvas); } function doContrast(){ let cropperData = {} if( cropper ){ cropperData = cropper.getData() cropper.destroy() } context.putImageData(snap,0,0) binary(context) cropper = new Cropper(canvas); setTimeout( () => { cropper.setData(cropperData) ; },30) } // Trigger photo take $('.snap').on('click', function() { doSnap() }); function binary(context){ /* To convert image into binary , we will threshold it. Based upon the threshold value thresh_red, thresh_blue, thresh_green ==> are the respective red, blue and green color threshold values. Any thing above this threshold value will be denoted by white color and anything below will be black */ var image = context.getImageData(0, 0, context.canvas.width, context.canvas.height); var thresh_red = binary_level; var thresh_green = binary_level; var thresh_blue = binary_level; var channels = image.data.length/4; for(var i=0;i= thresh_red && g>= thresh_green && b>=thresh_blue ){ image.data[i*4 + 0] = 255; image.data[i*4 + 1] = 255; image.data[i*4 + 2] = 255; }else{ image.data[i*4 + 0] = 0; image.data[i*4 + 1] = 0; image.data[i*4 + 2] = 0; } } context.putImageData(image, 0, 0); } $("#result").hide() var slider = $( "#slider" ).slider({ range: false, value: 100, animate: 300, min : 0, max : 255, change: function(event,ui){ binary_level = ui.value console.log(`binary_level:${binary_level}`) doContrast() } }); $("#send").on("click",function(){ var cropCanvas = cropper.getCroppedCanvas(); image_data = cropCanvas.toDataURL(); $("#messages").html('') $.ajax({ timeout: 3000, url: url + "/image", method:"POST", dataType: "json", data:{ image_data : image_data, text : $("#text").val() }, }).done(function(d,m,j){ if( d.errors ){ msg = d.errors.join(" / ") $("#messages").html(``) return } $("#messages").html(``) imageList = localStorage.getItem("imageList") ? JSON.parse(localStorage.getItem("imageList")) : [] imageList.push(d.hash_name) localStorage.setItem("imageList",JSON.stringify(imageList)) refreshImageList() }) .fail(function(d,m,jq){ $("#messages").html(``) }) }) var simuCanvas = document.getElementById("simuCanvas"); var ctx = simuCanvas.getContext("2d"); var lastpoint = { x: 0, y: 0, color: 0}; var zoom = 1; //ctx.save Point = function( l ){ return { "x" : l[0], "y" : l[1], "color" : l[2] } } // Draws every segment received, except black colored target ones var drawSimu = function() { pointsList = document.pointsList if (pointsList.length > 0) { ctx.clearRect(0,0,simuCanvas.width,simuCanvas.height); lastpoint = new Point(pointsList[0]) for (var i = 0; i < pointsList.length; i+=1) { point = new Point(pointsList[i]) // if the target is black, skip drawing if( point.color != 0){ ctx.beginPath() ctx.shadowBlur = 5; ctx.shadowColor = 'rgba(255, 255, 255, 1)'; ctx.lineWidth = 2; ctx.strokeStyle = "#"+(point.color + Math.pow(16, 6)).toString(16).slice(-6); ctx.moveTo(lastpoint.x * zoom, lastpoint.y * zoom); ctx.lineTo(point.x * zoom, point.y * zoom); ctx.stroke(); ctx.closePath() } lastpoint = point } } } function refreshImageList(){ var imageList = localStorage.getItem("imageList") ? JSON.parse(localStorage.getItem("imageList")) : [] if( 0 == imageList.length){ $("#preview").hide() return } $("#preview").show() html = '' for( id in imageList.reverse()){ hash_name = imageList[id] html += `
  • ${hash_name}
  • ` } $("#imageList").html(``) } refreshImageList() var showImage = function(e){ var el = $(e.target) if( ! el.hasClass("hash_name") ) { return; } var hash_name = el.attr("rel") var u = `${url}/hash_name/${hash_name}` $.ajax({ timeout: 3000, url: `${url}/hash_name/${hash_name}`, dataType: "json", }).done(function(d,m,j){ if( d.errors ){ msg = d.errors.join(" / ") $("#messages").html(``) return } $("#messages").html("") document.pointsList = d.points_list drawSimu() }) .fail(function(d,m,jq){ $("#messages").html(``) }) } $("#imageList").on("click", showImage) $("#messages").on("click", showImage) $(".contrast").on("click",function(el){ let btn = el.target let val = Number($(btn).attr("rel")) let new_binary_level = binary_level + val; console.log(`new_binary_level:${new_binary_level}`) if( new_binary_level >= 0 && new_binary_level <= 255){ binary_level = new_binary_level $("#slider").slider("option","value",binary_level) } }) })