diff --git a/Gemfile.lock b/Gemfile.lock index e6cc1a3..45b0d7a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,140 +1,199 @@ GEM remote: https://rubygems.org/ specs: - RedCloth (4.2.9) - RedCloth (4.2.9-x86-mingw32) - activesupport (4.2.4) + activesupport (4.2.8) i18n (~> 0.7) - json (~> 1.7, >= 1.7.7) minitest (~> 5.1) thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) - addressable (2.3.8) - blankslate (2.1.2.4) - celluloid (0.16.0) - timers (~> 4.0.0) - classifier-reborn (2.0.3) - fast-stemmer (~> 1.0) + addressable (2.5.1) + public_suffix (~> 2.0, >= 2.0.2) coffee-script (2.4.1) coffee-script-source execjs - coffee-script-source (1.9.1.1) - colorator (0.1) - ethon (0.7.4) + coffee-script-source (1.12.2) + colorator (1.1.0) + ethon (0.10.1) ffi (>= 1.3.0) - execjs (2.6.0) - fast-stemmer (1.0.2) - ffi (1.9.10) - ffi (1.9.10-x64-mingw32) - ffi (1.9.10-x86-mingw32) - gemoji (2.1.0) - github-pages (39) - RedCloth (= 4.2.9) - github-pages-health-check (~> 0.2) - jekyll (= 2.4.0) + execjs (2.7.0) + faraday (0.12.1) + multipart-post (>= 1.2, < 3) + ffi (1.9.18) + ffi (1.9.18-x64-mingw32) + ffi (1.9.18-x86-mingw32) + forwardable-extended (2.6.0) + gemoji (3.0.0) + github-pages (139) + activesupport (= 4.2.8) + github-pages-health-check (= 1.3.3) + jekyll (= 3.4.3) + jekyll-avatar (= 0.4.2) jekyll-coffeescript (= 1.0.1) - jekyll-feed (= 0.3.1) - jekyll-mentions (= 0.2.1) - jekyll-redirect-from (= 0.8.0) - jekyll-sass-converter (= 1.3.0) - jekyll-sitemap (= 0.8.1) - jemoji (= 0.5.0) - kramdown (= 1.5.0) - liquid (= 2.6.2) - maruku (= 0.7.0) + jekyll-default-layout (= 0.1.4) + jekyll-feed (= 0.9.2) + jekyll-gist (= 1.4.0) + jekyll-github-metadata (= 2.3.1) + jekyll-mentions (= 1.2.0) + jekyll-optional-front-matter (= 0.1.2) + jekyll-paginate (= 1.1.0) + jekyll-readme-index (= 0.1.0) + jekyll-redirect-from (= 0.12.1) + jekyll-relative-links (= 0.4.0) + jekyll-sass-converter (= 1.5.0) + jekyll-seo-tag (= 2.2.3) + jekyll-sitemap (= 1.0.0) + jekyll-swiss (= 0.4.0) + jekyll-theme-architect (= 0.0.4) + jekyll-theme-cayman (= 0.0.4) + jekyll-theme-dinky (= 0.0.4) + jekyll-theme-hacker (= 0.0.4) + jekyll-theme-leap-day (= 0.0.4) + jekyll-theme-merlot (= 0.0.4) + jekyll-theme-midnight (= 0.0.4) + jekyll-theme-minimal (= 0.0.4) + jekyll-theme-modernist (= 0.0.4) + jekyll-theme-primer (= 0.2.1) + jekyll-theme-slate (= 0.0.4) + jekyll-theme-tactile (= 0.0.4) + jekyll-theme-time-machine (= 0.0.4) + jekyll-titles-from-headings (= 0.1.5) + jemoji (= 0.8.0) + kramdown (= 1.13.2) + liquid (= 3.0.6) + listen (= 3.0.6) mercenary (~> 0.3) - pygments.rb (= 0.6.3) - rdiscount (= 2.1.7) - redcarpet (= 3.3.2) + minima (= 2.1.1) + rouge (= 1.11.1) terminal-table (~> 1.4) - github-pages-health-check (0.4.2) + github-pages-health-check (1.3.3) addressable (~> 2.3) net-dns (~> 0.8) - public_suffix (~> 1.4) + octokit (~> 4.0) + public_suffix (~> 2.0) typhoeus (~> 0.7) - hitimes (1.2.2) - hitimes (1.2.2-x86-mingw32) - html-pipeline (1.9.0) + html-pipeline (2.6.0) activesupport (>= 2) - nokogiri (~> 1.4) - i18n (0.7.0) - jekyll (2.4.0) - classifier-reborn (~> 2.0) - colorator (~> 0.1) - jekyll-coffeescript (~> 1.0) - jekyll-gist (~> 1.0) - jekyll-paginate (~> 1.0) + nokogiri (>= 1.4) + i18n (0.8.4) + jekyll (3.4.3) + addressable (~> 2.4) + colorator (~> 1.0) jekyll-sass-converter (~> 1.0) jekyll-watch (~> 1.1) kramdown (~> 1.3) - liquid (~> 2.6.1) + liquid (~> 3.0) mercenary (~> 0.3.3) - pygments.rb (~> 0.6.0) - redcarpet (~> 3.1) + pathutil (~> 0.9) + rouge (~> 1.7) safe_yaml (~> 1.0) - toml (~> 0.1.0) + jekyll-avatar (0.4.2) + jekyll (~> 3.0) jekyll-coffeescript (1.0.1) coffee-script (~> 2.2) - jekyll-feed (0.3.1) - jekyll-gist (1.3.4) - jekyll-mentions (0.2.1) - html-pipeline (~> 1.9.0) - jekyll (~> 2.0) + jekyll-default-layout (0.1.4) + jekyll (~> 3.0) + jekyll-feed (0.9.2) + jekyll (~> 3.3) + jekyll-gist (1.4.0) + octokit (~> 4.2) + jekyll-github-metadata (2.3.1) + jekyll (~> 3.1) + octokit (~> 4.0, != 4.4.0) + jekyll-mentions (1.2.0) + activesupport (~> 4.0) + html-pipeline (~> 2.3) + jekyll (~> 3.0) + jekyll-optional-front-matter (0.1.2) + jekyll (~> 3.0) jekyll-paginate (1.1.0) - jekyll-redirect-from (0.8.0) - jekyll (>= 2.0) - jekyll-sass-converter (1.3.0) - sass (~> 3.2) - jekyll-sitemap (0.8.1) - jekyll-watch (1.2.1) - listen (~> 2.7) - jemoji (0.5.0) - gemoji (~> 2.0) - html-pipeline (~> 1.9) - jekyll (>= 2.0) - json (1.8.3) - kramdown (1.5.0) - liquid (2.6.2) - listen (2.10.1) - celluloid (~> 0.16.0) + jekyll-readme-index (0.1.0) + jekyll (~> 3.0) + jekyll-redirect-from (0.12.1) + jekyll (~> 3.3) + jekyll-relative-links (0.4.0) + jekyll (~> 3.3) + jekyll-sass-converter (1.5.0) + sass (~> 3.4) + jekyll-seo-tag (2.2.3) + jekyll (~> 3.3) + jekyll-sitemap (1.0.0) + jekyll (~> 3.3) + jekyll-swiss (0.4.0) + jekyll-theme-architect (0.0.4) + jekyll (~> 3.3) + jekyll-theme-cayman (0.0.4) + jekyll (~> 3.3) + jekyll-theme-dinky (0.0.4) + jekyll (~> 3.3) + jekyll-theme-hacker (0.0.4) + jekyll (~> 3.3) + jekyll-theme-leap-day (0.0.4) + jekyll (~> 3.3) + jekyll-theme-merlot (0.0.4) + jekyll (~> 3.3) + jekyll-theme-midnight (0.0.4) + jekyll (~> 3.3) + jekyll-theme-minimal (0.0.4) + jekyll (~> 3.3) + jekyll-theme-modernist (0.0.4) + jekyll (~> 3.3) + jekyll-theme-primer (0.2.1) + jekyll (~> 3.3) + jekyll-theme-slate (0.0.4) + jekyll (~> 3.3) + jekyll-theme-tactile (0.0.4) + jekyll (~> 3.3) + jekyll-theme-time-machine (0.0.4) + jekyll (~> 3.3) + jekyll-titles-from-headings (0.1.5) + jekyll (~> 3.3) + jekyll-watch (1.5.0) + listen (~> 3.0, < 3.1) + jemoji (0.8.0) + activesupport (~> 4.0) + gemoji (~> 3.0) + html-pipeline (~> 2.2) + jekyll (>= 3.0) + kramdown (1.13.2) + liquid (3.0.6) + listen (3.0.6) rb-fsevent (>= 0.9.3) - rb-inotify (>= 0.9) - maruku (0.7.0) - mercenary (0.3.5) - mini_portile (0.6.2) - minitest (5.8.0) + rb-inotify (>= 0.9.7) + mercenary (0.3.6) + mini_portile2 (2.2.0) + minima (2.1.1) + jekyll (~> 3.3) + minitest (5.10.2) + multipart-post (2.0.0) net-dns (0.8.0) - nokogiri (1.6.6.2) - mini_portile (~> 0.6.0) - nokogiri (1.6.6.2-x64-mingw32) - mini_portile (~> 0.6.0) - nokogiri (1.6.6.2-x86-mingw32) - mini_portile (~> 0.6.0) - parslet (1.5.0) - blankslate (~> 2.0) - posix-spawn (0.3.11) - public_suffix (1.5.1) - pygments.rb (0.6.3) - posix-spawn (~> 0.3.6) - yajl-ruby (~> 1.2.0) - rb-fsevent (0.9.5) - rb-inotify (0.9.5) + nokogiri (1.8.0) + mini_portile2 (~> 2.2.0) + nokogiri (1.8.0-x64-mingw32) + mini_portile2 (~> 2.2.0) + nokogiri (1.8.0-x86-mingw32) + mini_portile2 (~> 2.2.0) + octokit (4.7.0) + sawyer (~> 0.8.0, >= 0.5.3) + pathutil (0.14.0) + forwardable-extended (~> 2.6) + public_suffix (2.0.5) + rb-fsevent (0.9.8) + rb-inotify (0.9.8) ffi (>= 0.5.0) - rdiscount (2.1.7) - redcarpet (3.3.2) + rouge (1.11.1) safe_yaml (1.0.4) - sass (3.4.18) - terminal-table (1.5.2) - thread_safe (0.3.5) - timers (4.0.1) - hitimes - toml (0.1.2) - parslet (~> 1.5.0) - typhoeus (0.7.3) - ethon (>= 0.7.4) - tzinfo (1.2.2) + sass (3.4.24) + sawyer (0.8.1) + addressable (>= 2.3.5, < 2.6) + faraday (~> 0.8, < 1.0) + terminal-table (1.8.0) + unicode-display_width (~> 1.1, >= 1.1.1) + thread_safe (0.3.6) + typhoeus (0.8.0) + ethon (>= 0.8.0) + tzinfo (1.2.3) thread_safe (~> 0.1) - yajl-ruby (1.2.1) + unicode-display_width (1.2.1) PLATFORMS ruby @@ -145,4 +204,4 @@ DEPENDENCIES github-pages BUNDLED WITH - 1.13.6 + 1.14.6 diff --git a/examples/file_input.html b/examples/file_input.html index 3c1cee2..12a34cb 100644 --- a/examples/file_input.html +++ b/examples/file_input.html @@ -35,6 +35,8 @@ showInMenu: false + + + +
@@ -80,5 +90,6 @@ showInMenu: false + diff --git a/examples/live_w_locator.js b/examples/live_w_locator.js index 6b36c97..c0a2fd6 100644 --- a/examples/live_w_locator.js +++ b/examples/live_w_locator.js @@ -7,9 +7,55 @@ $(function() { return; } App.attachListeners(); + App.checkCapabilities(); Quagga.start(); }); }, + checkCapabilities: function() { + var track = Quagga.CameraAccess.getActiveTrack(); + var capabilities = {}; + if (typeof track.getCapabilities === 'function') { + capabilities = track.getCapabilities(); + } + this.applySettingsVisibility('zoom', capabilities.zoom); + this.applySettingsVisibility('torch', capabilities.torch); + }, + updateOptionsForMediaRange: function(node, range) { + console.log('updateOptionsForMediaRange', node, range); + var NUM_STEPS = 6; + var stepSize = (range.max - range.min) / NUM_STEPS; + var option; + var value; + while (node.firstChild) { + node.removeChild(node.firstChild); + } + for (var i = 0; i <= NUM_STEPS; i++) { + value = range.min + (stepSize * i); + option = document.createElement('option'); + option.value = value; + option.innerHTML = value; + node.appendChild(option); + } + }, + applySettingsVisibility: function(setting, capability) { + // depending on type of capability + if (typeof capability === 'boolean') { + var node = document.querySelector('input[name="settings_' + setting + '"]'); + if (node) { + node.parentNode.style.display = capability ? 'block' : 'none'; + } + return; + } + if (window.MediaSettingsRange && capability instanceof window.MediaSettingsRange) { + var node = document.querySelector('select[name="settings_' + setting + '"]'); + if (node) { + this.updateOptionsForMediaRange(node, capability); + node.parentNode.style.display = 'block'; + } + return; + } + node.parentNode.style.display = 'none'; + }, initCameraSelection: function(){ var streamLabel = Quagga.CameraAccess.getActiveStreamLabel(); @@ -76,6 +122,17 @@ $(function() { $(".controls").off("click", "button.stop"); $(".controls .reader-config-group").off("change", "input, select"); }, + applySetting: function(setting, value) { + var track = Quagga.CameraAccess.getActiveTrack(); + if (track && typeof track.getCapabilities === 'function') { + switch (setting) { + case 'zoom': + return track.applyConstraints({advanced: [{zoom: parseFloat(value)}]}); + case 'torch': + return track.applyConstraints({advanced: [{torch: !!value}]}); + } + } + }, setState: function(path, value) { var self = this; @@ -83,6 +140,10 @@ $(function() { value = self._accessByPath(self.inputMapper, path)(value); } + if (path.startsWith('settings.')) { + var setting = path.substring(9); + return self.applySetting(setting, value); + } self._accessByPath(self.state, path, value); console.log(JSON.stringify(self.state)); @@ -141,7 +202,8 @@ $(function() { patchSize: "medium", halfSample: true }, - numOfWorkers: 4, + numOfWorkers: 2, + frequency: 10, decoder: { readers : [{ format: "code_128_reader", diff --git a/examples/static_images.html b/examples/static_images.html index df741ce..79f2634 100644 --- a/examples/static_images.html +++ b/examples/static_images.html @@ -29,6 +29,8 @@ showInMenu: false + +
diff --git a/index.md b/index.md index c3fad15..0223dc9 100644 --- a/index.md +++ b/index.md @@ -7,7 +7,7 @@ showInMenu: true quaggaJS ======== -- [Changelog](#changelog) (2017-01-08) +- [Changelog](#changelog) (2017-06-06) - [Browser Support](#browser-support) - [Installing](#installing) - [Getting Started](#gettingstarted) @@ -18,11 +18,11 @@ quaggaJS QuaggaJS is a barcode-scanner entirely written in JavaScript supporting real- time localization and decoding of various types of barcodes such as __EAN__, -__CODE 128__, __CODE 39__, __EAN 8__, __UPC-A__, __UPC-C__, __I2of5__ and -__CODABAR__. The library is also capable of using `getUserMedia` to get direct -access to the user's camera stream. Although the code relies on heavy image- -processing even recent smartphones are capable of locating and decoding -barcodes in real-time. +__CODE 128__, __CODE 39__, __EAN 8__, __UPC-A__, __UPC-C__, __I2of5__, +__2of5__, __CODE 93__ and __CODABAR__. The library is also capable of using +`getUserMedia` to get direct access to the user's camera stream. Although the +code relies on heavy image-processing even recent smartphones are capable of +locating and decoding barcodes in real-time. Try some [examples](https://serratus.github.io/quaggaJS/examples) and check out the blog post ([How barcode-localization works in QuaggaJS][oberhofer_co_how]) @@ -420,6 +420,8 @@ barcodes which should be decoded during the session. Possible values are: - upc_reader - upc_e_reader - i2of5_reader +- 2of5_reader +- code_93_reader Why are not all types activated by default? Simply because one should explicitly define the set of barcodes for their use-case. More decoders means @@ -642,6 +644,19 @@ on the ``singleChannel`` flag in the configuration when using ``decodeSingle``. ## Changelog +### 2017-06-06 +- Features + - Support for Standard 2of5 barcodes (See + [\#194](https://github.com/serratus/quaggaJS/issues/194)) + - Support for Code 93 barcodes (See + [\#194](https://github.com/serratus/quaggaJS/issues/195)) + - Exposing `Quagga.CameraAccess.getActiveTrack()` to get access to the + currently used `MediaStreamTrack` + - Example can be viewed here: [example/live_w_locator.js](https://github.com/serratus/quaggaJS/blob/master/example/live_w_locator.js) and a [demo](https://serratus.github.io/quaggaJS/examples/live_w_locator.html) + +Take a look at the release-notes ( + [0.12.0](https://github.com/serratus/quaggaJS/releases/tag/v0.12.0)) + ### 2017-01-08 - Improvements - Exposing `CameraAccess` module to get access to methods like diff --git a/server.pem b/server.pem new file mode 100644 index 0000000..04fd185 --- /dev/null +++ b/server.pem @@ -0,0 +1,33 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQC9ORap3LvRegtrhRc8dLdH9Bp2QokcKEsWbtvyhtjisRRm2slK +A6Q11McB/YTb7oImFfNaCX+7vdM1oVXVLJ0ekQaNljXG5Dy7DXEcT1V6gpN4xmZJ +8f/KZ45VBINN0Ha74L7nS4kgImh5yvNolNr4IdlSjGf09kciFy8S3kPlGQIDAQAB +AoGAYDlaxBCC1liY3Bl3IoA7//QrTL4zGUWIQaUoZmGag1UHifJycBf/9nv4o5N3 +b5wPRSzebofsE93JPTmI+3nPf62k5rS2xOo8swwOZc+f5/v0EnUNixD7P0jBiLVR +B8kbMvNdNn33HuynW1/MSBFE0cfeDH2i8SVl+Z+fHYIUW10CQQD0yWB8xeM8AxYB +/ZZWClem6gf1lQAYLzid3x51pkLqRFpX+rG251cSBUouE+kVO14j2xrBqCyyOwNu +17eazy3DAkEAxeQdWP9b11ihKOf/kjXiczltLnBsotn6K9EEAe0QuH/6iXLm86mL +ZiQe+TrY1GWbK3ns0sfXgNJ2aeaRkeZn8wJAWF5WedTKisCmckOEwTzslbJI+0w2 +A4UQkFWa3mgOIhpY7wfunhP35+aG+AlyDJspChKwHxdCQ3lwbNRtUPLYFwJBAK8G +9QIbUbLlPB1/HOfH6xM4rp3NZ/idzQxmISJG+GwHHaPmUekfgyEDP7X2W4N4nsbU +XyeLA8t32q4N9aDS5gsCQDHqhsXqnY6e4IEZrvf90l2V1PpnTKfEl/F5wye3g69G +JN57scVUBHP/KKoyfge0fytWiQN/56KvWH+G5+N/JyA= +-----END RSA PRIVATE KEY----- +-----BEGIN CERTIFICATE----- +MIIC2zCCAkSgAwIBAgIJALUDN95Or7XlMA0GCSqGSIb3DQEBBQUAMFMxCzAJBgNV +BAYTAkFUMQ8wDQYDVQQIEwZTdHlyaWExDTALBgNVBAcTBEdyYXoxETAPBgNVBAoT +CFF1YWdnYUpTMREwDwYDVQQDEwhxdWFnZ2FqczAeFw0xNzAxMDgxNjI5MjhaFw0x +ODAxMDgxNjI5MjhaMFMxCzAJBgNVBAYTAkFUMQ8wDQYDVQQIEwZTdHlyaWExDTAL +BgNVBAcTBEdyYXoxETAPBgNVBAoTCFF1YWdnYUpTMREwDwYDVQQDEwhxdWFnZ2Fq +czCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvTkWqdy70XoLa4UXPHS3R/Qa +dkKJHChLFm7b8obY4rEUZtrJSgOkNdTHAf2E2+6CJhXzWgl/u73TNaFV1SydHpEG +jZY1xuQ8uw1xHE9VeoKTeMZmSfH/ymeOVQSDTdB2u+C+50uJICJoecrzaJTa+CHZ +Uoxn9PZHIhcvEt5D5RkCAwEAAaOBtjCBszAdBgNVHQ4EFgQUYm5+uJVOOGiYa+Vx +2o++VHyWkwIwgYMGA1UdIwR8MHqAFGJufriVTjhomGvlcdqPvlR8lpMCoVekVTBT +MQswCQYDVQQGEwJBVDEPMA0GA1UECBMGU3R5cmlhMQ0wCwYDVQQHEwRHcmF6MREw +DwYDVQQKEwhRdWFnZ2FKUzERMA8GA1UEAxMIcXVhZ2dhanOCCQC1AzfeTq+15TAM +BgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBACyzC/CKL1mgTuNgFDuUf6u+ +YMnqlc9wcnEaFuvXnkSh6fT+qMZm188C/tlZwcWTrGmoCM0K6mX1TpHOjm8vbeXZ +diezAVGIVN3VoHqm6yJldI2rgFI9r5BfwAWYC8XNjqnT3U6cm4k8iC7jmLC+dT9r +Ysx2ucAF6lNHayekRmNq +-----END CERTIFICATE----- diff --git a/stylesheets/example.css b/stylesheets/example.css index 73941ed..1158679 100644 --- a/stylesheets/example.css +++ b/stylesheets/example.css @@ -104,6 +104,8 @@ canvas.drawing, canvas.drawingBuffer { /* line 16, ../sass/_viewport.scss */ .controls fieldset { border: none; + margin: 0; + padding: 0; } /* line 19, ../sass/_viewport.scss */ .controls .input-group { @@ -123,7 +125,7 @@ canvas.drawing, canvas.drawingBuffer { } /* line 30, ../sass/_viewport.scss */ .controls .reader-config-group label span { - width: 11rem; + width: 9rem; display: inline-block; text-align: right; } @@ -196,6 +198,18 @@ canvas.drawing, canvas.drawingBuffer { } @media (max-width: 603px) { /* line 5, ../sass/phone/_viewport.scss */ + .reader-config-group { + width: 100%; + } + + .reader-config-group label > span { + width: 50%; + } + + .reader-config-group label > select, .reader-config-group label > input { + max-width: calc(50% - 2px); + } + #interactive.viewport { width: 100%; height: auto; diff --git a/test/fixtures/2of5/image-001.jpg b/test/fixtures/2of5/image-001.jpg new file mode 100644 index 0000000..77744b9 Binary files /dev/null and b/test/fixtures/2of5/image-001.jpg differ diff --git a/test/fixtures/2of5/image-002.jpg b/test/fixtures/2of5/image-002.jpg new file mode 100644 index 0000000..eea372a Binary files /dev/null and b/test/fixtures/2of5/image-002.jpg differ diff --git a/test/fixtures/2of5/image-003.jpg b/test/fixtures/2of5/image-003.jpg new file mode 100644 index 0000000..bd60e84 Binary files /dev/null and b/test/fixtures/2of5/image-003.jpg differ diff --git a/test/fixtures/2of5/image-004.jpg b/test/fixtures/2of5/image-004.jpg new file mode 100644 index 0000000..b7e58fe Binary files /dev/null and b/test/fixtures/2of5/image-004.jpg differ diff --git a/test/fixtures/2of5/image-005.jpg b/test/fixtures/2of5/image-005.jpg new file mode 100644 index 0000000..06e379e Binary files /dev/null and b/test/fixtures/2of5/image-005.jpg differ diff --git a/test/fixtures/2of5/image-006.jpg b/test/fixtures/2of5/image-006.jpg new file mode 100644 index 0000000..74f4ba5 Binary files /dev/null and b/test/fixtures/2of5/image-006.jpg differ diff --git a/test/fixtures/2of5/image-007.jpg b/test/fixtures/2of5/image-007.jpg new file mode 100644 index 0000000..70677d1 Binary files /dev/null and b/test/fixtures/2of5/image-007.jpg differ diff --git a/test/fixtures/2of5/image-008.jpg b/test/fixtures/2of5/image-008.jpg new file mode 100644 index 0000000..5eecc3f Binary files /dev/null and b/test/fixtures/2of5/image-008.jpg differ diff --git a/test/fixtures/2of5/image-009.jpg b/test/fixtures/2of5/image-009.jpg new file mode 100644 index 0000000..c7c88cb Binary files /dev/null and b/test/fixtures/2of5/image-009.jpg differ diff --git a/test/fixtures/2of5/image-010.jpg b/test/fixtures/2of5/image-010.jpg new file mode 100644 index 0000000..d419d71 Binary files /dev/null and b/test/fixtures/2of5/image-010.jpg differ diff --git a/test/fixtures/2of5/image-012.jpg b/test/fixtures/2of5/image-012.jpg new file mode 100644 index 0000000..f704037 Binary files /dev/null and b/test/fixtures/2of5/image-012.jpg differ diff --git a/test/fixtures/2of5/image-015.jpg b/test/fixtures/2of5/image-015.jpg new file mode 100644 index 0000000..496f6b2 Binary files /dev/null and b/test/fixtures/2of5/image-015.jpg differ diff --git a/test/fixtures/2of5/image-016.jpg b/test/fixtures/2of5/image-016.jpg new file mode 100644 index 0000000..c30e78a Binary files /dev/null and b/test/fixtures/2of5/image-016.jpg differ diff --git a/test/fixtures/2of5/image-017.jpg b/test/fixtures/2of5/image-017.jpg new file mode 100644 index 0000000..9ce5d9f Binary files /dev/null and b/test/fixtures/2of5/image-017.jpg differ diff --git a/test/fixtures/code_93/image-001.jpg b/test/fixtures/code_93/image-001.jpg new file mode 100644 index 0000000..795196b Binary files /dev/null and b/test/fixtures/code_93/image-001.jpg differ diff --git a/test/fixtures/code_93/image-002.jpg b/test/fixtures/code_93/image-002.jpg new file mode 100644 index 0000000..5bad400 Binary files /dev/null and b/test/fixtures/code_93/image-002.jpg differ diff --git a/test/fixtures/code_93/image-003.jpg b/test/fixtures/code_93/image-003.jpg new file mode 100644 index 0000000..2a523e6 Binary files /dev/null and b/test/fixtures/code_93/image-003.jpg differ diff --git a/test/fixtures/code_93/image-004.jpg b/test/fixtures/code_93/image-004.jpg new file mode 100644 index 0000000..39758ec Binary files /dev/null and b/test/fixtures/code_93/image-004.jpg differ diff --git a/test/fixtures/code_93/image-005.jpg b/test/fixtures/code_93/image-005.jpg new file mode 100644 index 0000000..227f6fe Binary files /dev/null and b/test/fixtures/code_93/image-005.jpg differ diff --git a/test/fixtures/code_93/image-006.jpg b/test/fixtures/code_93/image-006.jpg new file mode 100644 index 0000000..f4622bc Binary files /dev/null and b/test/fixtures/code_93/image-006.jpg differ diff --git a/test/fixtures/code_93/image-007.jpg b/test/fixtures/code_93/image-007.jpg new file mode 100644 index 0000000..6bf7d02 Binary files /dev/null and b/test/fixtures/code_93/image-007.jpg differ diff --git a/test/fixtures/code_93/image-008.jpg b/test/fixtures/code_93/image-008.jpg new file mode 100644 index 0000000..21021b6 Binary files /dev/null and b/test/fixtures/code_93/image-008.jpg differ diff --git a/test/fixtures/code_93/image-009.jpg b/test/fixtures/code_93/image-009.jpg new file mode 100644 index 0000000..1250685 Binary files /dev/null and b/test/fixtures/code_93/image-009.jpg differ diff --git a/test/fixtures/code_93/image-010.jpg b/test/fixtures/code_93/image-010.jpg new file mode 100644 index 0000000..8f6a20e Binary files /dev/null and b/test/fixtures/code_93/image-010.jpg differ