removed unused examples
parent
0e917e4009
commit
f4e79e5e6c
@ -1,101 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8"/>
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
|
|
||||||
|
|
||||||
<title>index</title>
|
|
||||||
<meta name="description" content=""/>
|
|
||||||
<meta name="author" content="Christoph Oberhofer"/>
|
|
||||||
|
|
||||||
<meta name="viewport" content="width=device-width; initial-scale=1.0"/>
|
|
||||||
<link rel="stylesheet" type="text/css" href="css/styles.css"/>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<header>
|
|
||||||
<div class="headline">
|
|
||||||
<h1>QuaggaJS</h1>
|
|
||||||
|
|
||||||
<h2>An advanced barcode-scanner written in JavaScript</h2>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
<section id="container" class="container">
|
|
||||||
<h3>Working with file-input</h3>
|
|
||||||
|
|
||||||
<p>This example let's you select an image from your local filesystem.
|
|
||||||
QuaggaJS then tries to decode the barcode using
|
|
||||||
the preferred method (<strong>Code128</strong> or <strong>EAN</strong>).
|
|
||||||
There is no server interaction needed as the
|
|
||||||
file is simply accessed through the <a
|
|
||||||
href="http://www.w3.org/TR/file-upload/">File API</a>.</p>
|
|
||||||
|
|
||||||
<p>This also works great on a wide range of mobile-phones where the camera
|
|
||||||
access through <code>getUserMedia</code> is still very limited.</p>
|
|
||||||
|
|
||||||
<div class="controls">
|
|
||||||
<fieldset class="input-group">
|
|
||||||
<input type="file" capture/>
|
|
||||||
<button>Rerun</button>
|
|
||||||
</fieldset>
|
|
||||||
<fieldset class="reader-config-group">
|
|
||||||
<label>
|
|
||||||
<span>Barcode-Type</span>
|
|
||||||
<select name="decoder_readers">
|
|
||||||
<option value="code_128" selected="selected">Code 128</option>
|
|
||||||
<option value="code_39">Code 39</option>
|
|
||||||
<option value="code_39_vin">Code 39 VIN</option>
|
|
||||||
<option value="ean">EAN</option>
|
|
||||||
<option value="ean_8">EAN-8</option>
|
|
||||||
<option value="upc">UPC</option>
|
|
||||||
<option value="upc_e">UPC-E</option>
|
|
||||||
<option value="codabar">Codabar</option>
|
|
||||||
</select>
|
|
||||||
</label>
|
|
||||||
<label>
|
|
||||||
<span>Resolution (long side)</span>
|
|
||||||
<select name="input-stream_size">
|
|
||||||
<option value="320">320px</option>
|
|
||||||
<option selected="selected" value="640">640px</option>
|
|
||||||
<option value="800">800px</option>
|
|
||||||
<option value="1280">1280px</option>
|
|
||||||
<option value="1600">1600px</option>
|
|
||||||
<option value="1920">1920px</option>
|
|
||||||
</select>
|
|
||||||
</label>
|
|
||||||
<label>
|
|
||||||
<span>Patch-Size</span>
|
|
||||||
<select name="locator_patch-size">
|
|
||||||
<option value="x-small">x-small</option>
|
|
||||||
<option value="small">small</option>
|
|
||||||
<option selected="selected" value="medium">medium</option>
|
|
||||||
<option value="large">large</option>
|
|
||||||
<option value="x-large">x-large</option>
|
|
||||||
</select>
|
|
||||||
</label>
|
|
||||||
<label>
|
|
||||||
<span>Half-Sample</span>
|
|
||||||
<input type="checkbox" checked="checked"
|
|
||||||
name="locator_half-sample" />
|
|
||||||
</label>
|
|
||||||
<label>
|
|
||||||
<span>Single Channel</span>
|
|
||||||
<input type="checkbox" name="input-stream_single-channel" />
|
|
||||||
</label>
|
|
||||||
</fieldset>
|
|
||||||
</div>
|
|
||||||
<div id="result_strip">
|
|
||||||
<ul class="thumbnails"></ul>
|
|
||||||
</div>
|
|
||||||
<div id="interactive" class="viewport"></div>
|
|
||||||
<div id="debug" class="detection"></div>
|
|
||||||
</section>
|
|
||||||
<footer>
|
|
||||||
<p>
|
|
||||||
© Copyright by Christoph Oberhofer
|
|
||||||
</p>
|
|
||||||
</footer>
|
|
||||||
<script src="../src/vendor/jquery-1.9.0.min.js" type="text/javascript"></script>
|
|
||||||
<script data-main="file_input_require.js" src="../node_modules/requirejs/require.js"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,161 +0,0 @@
|
|||||||
requirejs.config({
|
|
||||||
"baseUrl" : "../src",
|
|
||||||
"shim" : {
|
|
||||||
"typedefs" : {
|
|
||||||
"deps" : [],
|
|
||||||
"exports" : "typedefs"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"paths" : {
|
|
||||||
"typedefs" : "typedefs",
|
|
||||||
"gl-matrix": "../node_modules/gl-matrix/dist/gl-matrix-min"
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
requirejs(['quagga'], function(Quagga) {
|
|
||||||
var App = {
|
|
||||||
init: function() {
|
|
||||||
App.attachListeners();
|
|
||||||
},
|
|
||||||
attachListeners: function() {
|
|
||||||
var self = this;
|
|
||||||
|
|
||||||
$(".controls input[type=file]").on("change", function(e) {
|
|
||||||
if (e.target.files && e.target.files.length) {
|
|
||||||
App.decode(URL.createObjectURL(e.target.files[0]));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
$(".controls button").on("click", function(e) {
|
|
||||||
var input = document.querySelector(".controls input[type=file]");
|
|
||||||
if (input.files && input.files.length) {
|
|
||||||
App.decode(URL.createObjectURL(input.files[0]));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
$(".controls .reader-config-group").on("change", "input, select", function(e) {
|
|
||||||
e.preventDefault();
|
|
||||||
var $target = $(e.target),
|
|
||||||
value = $target.attr("type") === "checkbox" ? $target.prop("checked") : $target.val(),
|
|
||||||
name = $target.attr("name"),
|
|
||||||
state = self._convertNameToState(name);
|
|
||||||
|
|
||||||
console.log("Value of "+ state + " changed to " + value);
|
|
||||||
self.setState(state, value);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
_accessByPath: function(obj, path, val) {
|
|
||||||
var parts = path.split('.'),
|
|
||||||
depth = parts.length,
|
|
||||||
setter = (typeof val !== "undefined") ? true : false;
|
|
||||||
|
|
||||||
return parts.reduce(function(o, key, i) {
|
|
||||||
if (setter && (i + 1) === depth) {
|
|
||||||
o[key] = val;
|
|
||||||
}
|
|
||||||
return key in o ? o[key] : {};
|
|
||||||
}, obj);
|
|
||||||
},
|
|
||||||
_convertNameToState: function(name) {
|
|
||||||
return name.replace("_", ".").split("-").reduce(function(result, value) {
|
|
||||||
return result + value.charAt(0).toUpperCase() + value.substring(1);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
detachListeners: function() {
|
|
||||||
$(".controls input[type=file]").off("change");
|
|
||||||
$(".controls .reader-config-group").off("change", "input, select");
|
|
||||||
$(".controls button").off("click");
|
|
||||||
},
|
|
||||||
decode: function(src) {
|
|
||||||
var self = this,
|
|
||||||
config = $.extend({}, self.state, {src: src});
|
|
||||||
|
|
||||||
Quagga.decodeSingle(config, function(result) {});
|
|
||||||
},
|
|
||||||
setState: function(path, value) {
|
|
||||||
var self = this;
|
|
||||||
|
|
||||||
if (typeof self._accessByPath(self.inputMapper, path) === "function") {
|
|
||||||
value = self._accessByPath(self.inputMapper, path)(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
self._accessByPath(self.state, path, value);
|
|
||||||
|
|
||||||
console.log(JSON.stringify(self.state));
|
|
||||||
App.detachListeners();
|
|
||||||
App.init();
|
|
||||||
},
|
|
||||||
inputMapper: {
|
|
||||||
inputStream: {
|
|
||||||
size: function(value){
|
|
||||||
return parseInt(value);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
numOfWorkers: function(value) {
|
|
||||||
return parseInt(value);
|
|
||||||
},
|
|
||||||
decoder: {
|
|
||||||
readers: function(value) {
|
|
||||||
return [value + "_reader"];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
state: {
|
|
||||||
inputStream: {
|
|
||||||
size: 640,
|
|
||||||
singleChannel: false
|
|
||||||
},
|
|
||||||
locator: {
|
|
||||||
patchSize: "medium",
|
|
||||||
halfSample: true,
|
|
||||||
showCanvas: true
|
|
||||||
},
|
|
||||||
numOfWorkers: 0,
|
|
||||||
decoder: {
|
|
||||||
readers: ["code_128_reader"],
|
|
||||||
showFrequency: true,
|
|
||||||
showPattern: true
|
|
||||||
},
|
|
||||||
locate: true,
|
|
||||||
src: null
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
App.init();
|
|
||||||
|
|
||||||
Quagga.onProcessed(function(result) {
|
|
||||||
var drawingCtx = Quagga.canvas.ctx.overlay,
|
|
||||||
drawingCanvas = Quagga.canvas.dom.overlay;
|
|
||||||
|
|
||||||
if (result) {
|
|
||||||
if (result.boxes) {
|
|
||||||
drawingCtx.clearRect(0, 0, parseInt(drawingCanvas.getAttribute("width")), parseInt(drawingCanvas.getAttribute("height")));
|
|
||||||
result.boxes.filter(function (box) {
|
|
||||||
return box !== result.box;
|
|
||||||
}).forEach(function (box) {
|
|
||||||
Quagga.ImageDebug.drawPath(box, {x: 0, y: 1}, drawingCtx, {color: "green", lineWidth: 2});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result.box) {
|
|
||||||
Quagga.ImageDebug.drawPath(result.box, {x: 0, y: 1}, drawingCtx, {color: "#00F", lineWidth: 2});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result.codeResult && result.codeResult.code) {
|
|
||||||
Quagga.ImageDebug.drawPath(result.line, {x: 'x', y: 'y'}, drawingCtx, {color: 'red', lineWidth: 3});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Quagga.onDetected(function(result) {
|
|
||||||
var code = result.codeResult.code,
|
|
||||||
$node,
|
|
||||||
canvas = Quagga.canvas.dom.image;
|
|
||||||
|
|
||||||
$node = $('<li><div class="thumbnail"><div class="imgWrapper"><img /></div><div class="caption"><h4 class="code"></h4></div></div></li>');
|
|
||||||
$node.find("img").attr("src", canvas.toDataURL());
|
|
||||||
$node.find("h4.code").html(code + " (" + result.codeResult.format + ")");
|
|
||||||
$("#result_strip ul.thumbnails").prepend($node);
|
|
||||||
});
|
|
||||||
});
|
|
Loading…
Reference in New Issue