Skip to content
This repository has been archived by the owner on Aug 19, 2022. It is now read-only.

Commit

Permalink
added image upload
Browse files Browse the repository at this point in the history
  • Loading branch information
gfwilliams committed Nov 6, 2017
1 parent ad4746c commit d47cfd0
Show file tree
Hide file tree
Showing 5 changed files with 242 additions and 48 deletions.
2 changes: 2 additions & 0 deletions docs-source/content/getting-started/other-code-samples.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ Relive your original Gameboy, Nokia and video arcade days with the following gam
### Web Bluetooth
* [Retrieve all images stored on a badge](https://github.com/nearform/nceubadge/blob/master/web_bluetooth/badge_images.html) ([try it](https://nodeconfeubadge.org/web_bluetooth/badge_images.html))
* [Take a picture with getUserMedia and put it on the badge](https://github.com/nearform/nceubadge/blob/master/web_bluetooth/badge_photo.html) ([try it](https://nodeconfeubadge.org/web_bluetooth/badge_photo.html))
* [Upload an image to the badge badge](https://github.com/nearform/nceubadge/blob/master/web_bluetooth/badge_upload.html) ([try it](https://nodeconfeubadge.org/web_bluetooth/badge_upload.html))


### Misc
* Check out the [world's most awkward REPL](https://www.espruino.com/ide/#https://raw.githubusercontent.com/nearform/nceubadge/master/repl.js)
Expand Down
49 changes: 25 additions & 24 deletions docs-source/public/getting-started/other-code-samples/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,17 @@
<title>Other Code Samples :: NodeConf EU Badge</title>


<link href="/css/nucleus.css?1509967303" rel="stylesheet">
<link href="/css/font-awesome.min.css?1509967303" rel="stylesheet">
<link href="/css/hybrid.css?1509967303" rel="stylesheet">
<link href="/css/featherlight.min.css?1509967303" rel="stylesheet">
<link href="/css/perfect-scrollbar.min.css?1509967303" rel="stylesheet">
<link href="/css/auto-complete.css?1509967303" rel="stylesheet">
<link href="/css/theme.css?1509967303" rel="stylesheet">
<link href="/css/hugo-theme.css?1509967303" rel="stylesheet">
<link href="/css/nucleus.css?1509969791" rel="stylesheet">
<link href="/css/font-awesome.min.css?1509969791" rel="stylesheet">
<link href="/css/hybrid.css?1509969791" rel="stylesheet">
<link href="/css/featherlight.min.css?1509969791" rel="stylesheet">
<link href="/css/perfect-scrollbar.min.css?1509969791" rel="stylesheet">
<link href="/css/auto-complete.css?1509969791" rel="stylesheet">
<link href="/css/theme.css?1509969791" rel="stylesheet">
<link href="/css/hugo-theme.css?1509969791" rel="stylesheet">


<script src="/js/jquery-2.x.min.js?1509967303"></script>
<script src="/js/jquery-2.x.min.js?1509969791"></script>

<style type="text/css">
:root #header + #content > #left > #rlblock_left{
Expand All @@ -49,14 +49,14 @@
<span data-search-clear=""><i class="fa fa-close"></i></span>
</div>

<script type="text/javascript" src="/js/lunr.min.js?1509967303"></script>
<script type="text/javascript" src="/js/auto-complete.js?1509967303"></script>
<script type="text/javascript" src="/js/lunr.min.js?1509969791"></script>
<script type="text/javascript" src="/js/auto-complete.js?1509969791"></script>
<script type="text/javascript">

var baseurl = "http:\/\/nodeconfeubadge.org";

</script>
<script type="text/javascript" src="/js/search.js?1509967303"></script>
<script type="text/javascript" src="/js/search.js?1509969791"></script>


</div>
Expand Down Expand Up @@ -917,6 +917,7 @@ <h3 id="web-bluetooth">Web Bluetooth</h3>
<ul>
<li><a href="https://github.com/nearform/nceubadge/blob/master/web_bluetooth/badge_images.html">Retrieve all images stored on a badge</a> (<a href="https://nodeconfeubadge.org/web_bluetooth/badge_images.html">try it</a>)</li>
<li><a href="https://github.com/nearform/nceubadge/blob/master/web_bluetooth/badge_photo.html">Take a picture with getUserMedia and put it on the badge</a> (<a href="https://nodeconfeubadge.org/web_bluetooth/badge_photo.html">try it</a>)</li>
<li><a href="https://github.com/nearform/nceubadge/blob/master/web_bluetooth/badge_upload.html">Upload an image to the badge badge</a> (<a href="https://nodeconfeubadge.org/web_bluetooth/badge_upload.html">try it</a>)</li>
</ul>

<h3 id="misc">Misc</h3>
Expand Down Expand Up @@ -1562,20 +1563,20 @@ <h3 id="misc">Misc</h3>
<div style="left: -1000px; overflow: scroll; position: absolute; top: -1000px; border: none; box-sizing: content-box; height: 200px; margin: 0px; padding: 0px; width: 200px;">
<div style="border: none; box-sizing: content-box; height: 200px; margin: 0px; padding: 0px; width: 200px;"></div>
</div>
<script src="/js/clipboard.min.js?1509967303"></script>
<script src="/js/perfect-scrollbar.min.js?1509967303"></script>
<script src="/js/perfect-scrollbar.jquery.min.js?1509967303"></script>
<script src="/js/jquery.sticky-kit.min.js?1509967303"></script>
<script src="/js/featherlight.min.js?1509967303"></script>
<script src="/js/html5shiv-printshiv.min.js?1509967303"></script>
<script src="/js/highlight.pack.js?1509967303"></script>
<script src="/js/clipboard.min.js?1509969791"></script>
<script src="/js/perfect-scrollbar.min.js?1509969791"></script>
<script src="/js/perfect-scrollbar.jquery.min.js?1509969791"></script>
<script src="/js/jquery.sticky-kit.min.js?1509969791"></script>
<script src="/js/featherlight.min.js?1509969791"></script>
<script src="/js/html5shiv-printshiv.min.js?1509969791"></script>
<script src="/js/highlight.pack.js?1509969791"></script>
<script>hljs.initHighlightingOnLoad();</script>
<script src="/js/modernizr.custom.71422.js?1509967303"></script>
<script src="/js/learn.js?1509967303"></script>
<script src="/js/hugo-learn.js?1509967303"></script>
<script src="/js/modernizr.custom.71422.js?1509969791"></script>
<script src="/js/learn.js?1509969791"></script>
<script src="/js/hugo-learn.js?1509969791"></script>

<link href="/mermaid/mermaid.css?1509967303" type="text/css" rel="stylesheet" />
<script src="/mermaid/mermaid.js?1509967303"></script>
<link href="/mermaid/mermaid.css?1509969791" type="text/css" rel="stylesheet" />
<script src="/mermaid/mermaid.js?1509969791"></script>
<script>
mermaid.initialize({ startOnLoad: true });
</script>
Expand Down
49 changes: 25 additions & 24 deletions docs/getting-started/other-code-samples/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,17 @@
<title>Other Code Samples :: NodeConf EU Badge</title>


<link href="/css/nucleus.css?1509967303" rel="stylesheet">
<link href="/css/font-awesome.min.css?1509967303" rel="stylesheet">
<link href="/css/hybrid.css?1509967303" rel="stylesheet">
<link href="/css/featherlight.min.css?1509967303" rel="stylesheet">
<link href="/css/perfect-scrollbar.min.css?1509967303" rel="stylesheet">
<link href="/css/auto-complete.css?1509967303" rel="stylesheet">
<link href="/css/theme.css?1509967303" rel="stylesheet">
<link href="/css/hugo-theme.css?1509967303" rel="stylesheet">
<link href="/css/nucleus.css?1509969791" rel="stylesheet">
<link href="/css/font-awesome.min.css?1509969791" rel="stylesheet">
<link href="/css/hybrid.css?1509969791" rel="stylesheet">
<link href="/css/featherlight.min.css?1509969791" rel="stylesheet">
<link href="/css/perfect-scrollbar.min.css?1509969791" rel="stylesheet">
<link href="/css/auto-complete.css?1509969791" rel="stylesheet">
<link href="/css/theme.css?1509969791" rel="stylesheet">
<link href="/css/hugo-theme.css?1509969791" rel="stylesheet">


<script src="/js/jquery-2.x.min.js?1509967303"></script>
<script src="/js/jquery-2.x.min.js?1509969791"></script>

<style type="text/css">
:root #header + #content > #left > #rlblock_left{
Expand All @@ -49,14 +49,14 @@
<span data-search-clear=""><i class="fa fa-close"></i></span>
</div>

<script type="text/javascript" src="/js/lunr.min.js?1509967303"></script>
<script type="text/javascript" src="/js/auto-complete.js?1509967303"></script>
<script type="text/javascript" src="/js/lunr.min.js?1509969791"></script>
<script type="text/javascript" src="/js/auto-complete.js?1509969791"></script>
<script type="text/javascript">

var baseurl = "http:\/\/nodeconfeubadge.org";

</script>
<script type="text/javascript" src="/js/search.js?1509967303"></script>
<script type="text/javascript" src="/js/search.js?1509969791"></script>


</div>
Expand Down Expand Up @@ -917,6 +917,7 @@ <h3 id="web-bluetooth">Web Bluetooth</h3>
<ul>
<li><a href="https://github.com/nearform/nceubadge/blob/master/web_bluetooth/badge_images.html">Retrieve all images stored on a badge</a> (<a href="https://nodeconfeubadge.org/web_bluetooth/badge_images.html">try it</a>)</li>
<li><a href="https://github.com/nearform/nceubadge/blob/master/web_bluetooth/badge_photo.html">Take a picture with getUserMedia and put it on the badge</a> (<a href="https://nodeconfeubadge.org/web_bluetooth/badge_photo.html">try it</a>)</li>
<li><a href="https://github.com/nearform/nceubadge/blob/master/web_bluetooth/badge_upload.html">Upload an image to the badge badge</a> (<a href="https://nodeconfeubadge.org/web_bluetooth/badge_upload.html">try it</a>)</li>
</ul>

<h3 id="misc">Misc</h3>
Expand Down Expand Up @@ -1562,20 +1563,20 @@ <h3 id="misc">Misc</h3>
<div style="left: -1000px; overflow: scroll; position: absolute; top: -1000px; border: none; box-sizing: content-box; height: 200px; margin: 0px; padding: 0px; width: 200px;">
<div style="border: none; box-sizing: content-box; height: 200px; margin: 0px; padding: 0px; width: 200px;"></div>
</div>
<script src="/js/clipboard.min.js?1509967303"></script>
<script src="/js/perfect-scrollbar.min.js?1509967303"></script>
<script src="/js/perfect-scrollbar.jquery.min.js?1509967303"></script>
<script src="/js/jquery.sticky-kit.min.js?1509967303"></script>
<script src="/js/featherlight.min.js?1509967303"></script>
<script src="/js/html5shiv-printshiv.min.js?1509967303"></script>
<script src="/js/highlight.pack.js?1509967303"></script>
<script src="/js/clipboard.min.js?1509969791"></script>
<script src="/js/perfect-scrollbar.min.js?1509969791"></script>
<script src="/js/perfect-scrollbar.jquery.min.js?1509969791"></script>
<script src="/js/jquery.sticky-kit.min.js?1509969791"></script>
<script src="/js/featherlight.min.js?1509969791"></script>
<script src="/js/html5shiv-printshiv.min.js?1509969791"></script>
<script src="/js/highlight.pack.js?1509969791"></script>
<script>hljs.initHighlightingOnLoad();</script>
<script src="/js/modernizr.custom.71422.js?1509967303"></script>
<script src="/js/learn.js?1509967303"></script>
<script src="/js/hugo-learn.js?1509967303"></script>
<script src="/js/modernizr.custom.71422.js?1509969791"></script>
<script src="/js/learn.js?1509969791"></script>
<script src="/js/hugo-learn.js?1509969791"></script>

<link href="/mermaid/mermaid.css?1509967303" type="text/css" rel="stylesheet" />
<script src="/mermaid/mermaid.js?1509967303"></script>
<link href="/mermaid/mermaid.css?1509969791" type="text/css" rel="stylesheet" />
<script src="/mermaid/mermaid.js?1509969791"></script>
<script>
mermaid.initialize({ startOnLoad: true });
</script>
Expand Down
95 changes: 95 additions & 0 deletions docs/web_bluetooth/badge_upload.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=320, initial-scale=1">
<title>Badge image writer</title>
</head>
<body>

<p>Choose a 128x64 image from your computer to upload it to your badge</p>


<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://www.puck-js.com/puck.js"></script>
<input type="file" id="fileLoader"/><br/>
<input type="checkbox" id="diffusion" onchange="imageLoaded()"/>Diffusion?</input>

<canvas id="canvas" style="display:none;"></canvas>

<p><h2>Result</h2></p>
<p><p><p id="ressize">...</p></p></p>
<textarea id="resdata" style="display:none;"></textarea>
<a id="idelink" href="#" target="_blank">Open IDE with code</a>
<button onclick="sendImage();">Send to badge</button>

<script>
var img;
function imageLoaded() {
if (img === undefined) return;
var diffusion = document.getElementById("diffusion").checked;
var canvas = document.getElementById("canvas")
var iw = 128;
var ih = 64;
canvas.width = 256;
canvas.height = 64;
canvas.style = "display:block;border:1px solid black;margin:8px;"
var ctx = canvas.getContext("2d");
ctx.drawImage(img,(iw-img.width)/2,(ih-img.height/2));

var imageData = ctx.getImageData(0, 0, iw, ih);
var data = imageData.data;
var bitData = new Uint8Array((iw*ih+7)>>3);
var n = 0;
for (var y=0; y<ih; y++) {
//var s = "";
for (var x=0; x<iw; x++) {
var c = (data[n*4]+data[n*4+1]+data[n*4+2])/ 3;
var thresh = 128;
if (diffusion) thresh=Math.random()*254+1;
if (c>thresh) {
bitData[n>>3] |= 128>>(n&7);
data[n*4]=255;
data[n*4+1]=255;
data[n*4+2]=255;
//s+="1";
} else {
data[n*4]=0;
data[n*4+1]=0;
data[n*4+2]=0;
//s+="0";
}
data[n*4+3]=255;
n++;
}
//console.log(s);
}
var str = "";
for (n=0; n<bitData.length; n++)
str += String.fromCharCode(bitData[n]);
var imgstr = "Badge.badgeImages.push({\n";
imgstr += " width : "+iw+", height : "+ih+", bpp : 1,\n";
imgstr += " sketched : 1,\n";
imgstr += ' buffer : E.toArrayBuffer(atob("'+btoa(str)+'"))\n';
imgstr += "});\n";
ctx.putImageData(imageData,iw,0);
document.getElementById("ressize").innerHTML = str.length+" Characters";
document.getElementById("resdata").innerHTML = imgstr;
document.getElementById("resdata").style = "width:650px;height:300px;";
document.getElementById("idelink").href = "https://www.espruino.com/ide/?code="+encodeURIComponent(imgstr);
}
$("#fileLoader").change(function(event) {
if (event.target.files.length != 1) return;
var reader = new FileReader();
reader.onload = function(event) {
img = new Image();
img.onload = imageLoaded;
img.src = event.target.result;
};
reader.readAsDataURL(event.target.files[0]);
});
function sendImage() {
Puck.write(document.getElementById("resdata").innerHTML+"\n");
}
</script>
</body>
</html>
95 changes: 95 additions & 0 deletions web_bluetooth/badge_upload.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=320, initial-scale=1">
<title>Badge image writer</title>
</head>
<body>

<p>Choose a 128x64 image from your computer to upload it to your badge</p>


<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://www.puck-js.com/puck.js"></script>
<input type="file" id="fileLoader"/><br/>
<input type="checkbox" id="diffusion" onchange="imageLoaded()"/>Diffusion?</input>

<canvas id="canvas" style="display:none;"></canvas>

<p><h2>Result</h2></p>
<p><p><p id="ressize">...</p></p></p>
<textarea id="resdata" style="display:none;"></textarea>
<a id="idelink" href="#" target="_blank">Open IDE with code</a>
<button onclick="sendImage();">Send to badge</button>

<script>
var img;
function imageLoaded() {
if (img === undefined) return;
var diffusion = document.getElementById("diffusion").checked;
var canvas = document.getElementById("canvas")
var iw = 128;
var ih = 64;
canvas.width = 256;
canvas.height = 64;
canvas.style = "display:block;border:1px solid black;margin:8px;"
var ctx = canvas.getContext("2d");
ctx.drawImage(img,(iw-img.width)/2,(ih-img.height/2));

var imageData = ctx.getImageData(0, 0, iw, ih);
var data = imageData.data;
var bitData = new Uint8Array((iw*ih+7)>>3);
var n = 0;
for (var y=0; y<ih; y++) {
//var s = "";
for (var x=0; x<iw; x++) {
var c = (data[n*4]+data[n*4+1]+data[n*4+2])/ 3;
var thresh = 128;
if (diffusion) thresh=Math.random()*254+1;
if (c>thresh) {
bitData[n>>3] |= 128>>(n&7);
data[n*4]=255;
data[n*4+1]=255;
data[n*4+2]=255;
//s+="1";
} else {
data[n*4]=0;
data[n*4+1]=0;
data[n*4+2]=0;
//s+="0";
}
data[n*4+3]=255;
n++;
}
//console.log(s);
}
var str = "";
for (n=0; n<bitData.length; n++)
str += String.fromCharCode(bitData[n]);
var imgstr = "Badge.badgeImages.push({\n";
imgstr += " width : "+iw+", height : "+ih+", bpp : 1,\n";
imgstr += " sketched : 1,\n";
imgstr += ' buffer : E.toArrayBuffer(atob("'+btoa(str)+'"))\n';
imgstr += "});\n";
ctx.putImageData(imageData,iw,0);
document.getElementById("ressize").innerHTML = str.length+" Characters";
document.getElementById("resdata").innerHTML = imgstr;
document.getElementById("resdata").style = "width:650px;height:300px;";
document.getElementById("idelink").href = "https://www.espruino.com/ide/?code="+encodeURIComponent(imgstr);
}
$("#fileLoader").change(function(event) {
if (event.target.files.length != 1) return;
var reader = new FileReader();
reader.onload = function(event) {
img = new Image();
img.onload = imageLoaded;
img.src = event.target.result;
};
reader.readAsDataURL(event.target.files[0]);
});
function sendImage() {
Puck.write(document.getElementById("resdata").innerHTML+"\n");
}
</script>
</body>
</html>

0 comments on commit d47cfd0

Please sign in to comment.