first commit

This commit is contained in:
s.golasch
2023-08-01 13:44:46 +02:00
commit 461ee45c97
218 changed files with 8294 additions and 0 deletions

22
.gitattributes vendored Normal file
View File

@@ -0,0 +1,22 @@
# Auto detect text files and perform LF normalization
* text=auto
# Custom for Visual Studio
*.cs diff=csharp
*.sln merge=union
*.csproj merge=union
*.vbproj merge=union
*.fsproj merge=union
*.dbproj merge=union
# Standard to msysgit
*.doc diff=astextplain
*.DOC diff=astextplain
*.docx diff=astextplain
*.DOCX diff=astextplain
*.dot diff=astextplain
*.DOT diff=astextplain
*.pdf diff=astextplain
*.PDF diff=astextplain
*.rtf diff=astextplain
*.RTF diff=astextplain

215
.gitignore vendored Normal file
View File

@@ -0,0 +1,215 @@
#################
## Eclipse
#################
*.pydevproject
.project
.metadata
bin/
tmp/
*.tmp
*.bak
*.swp
*~.nib
local.properties
.classpath
.settings/
.loadpath
# External tool builders
.externalToolBuilders/
# Locally stored "Eclipse launch configurations"
*.launch
# CDT-specific
.cproject
# PDT-specific
.buildpath
#################
## Visual Studio
#################
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
# User-specific files
*.suo
*.user
*.sln.docstates
# Build results
[Dd]ebug/
[Rr]elease/
x64/
build/
[Bb]in/
[Oo]bj/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
*_i.c
*_p.c
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.log
*.scc
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opensdf
*.sdf
*.cachefile
# Visual Studio profiler
*.psess
*.vsp
*.vspx
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# NCrunch
*.ncrunch*
.*crunch*.local.xml
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.Publish.xml
*.pubxml
# NuGet Packages Directory
## TODO: If you have NuGet Package Restore enabled, uncomment the next line
#packages/
# Windows Azure Build Output
csx
*.build.csdef
# Windows Store app package directory
AppPackages/
# Others
sql/
*.Cache
ClientBin/
[Ss]tyle[Cc]op.*
~$*
*~
*.dbmdl
*.[Pp]ublish.xml
*.pfx
*.publishsettings
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file to a newer
# Visual Studio version. Backup files are not needed, because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
# SQL Server files
App_Data/*.mdf
App_Data/*.ldf
#############
## Windows detritus
#############
# Windows image file caches
Thumbs.db
ehthumbs.db
# Folder config file
Desktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Mac crap
.DS_Store
#############
## Python
#############
*.py[co]
# Packages
*.egg
*.egg-info
dist/
build/
eggs/
parts/
var/
sdist/
develop-eggs/
.installed.cfg
# Installer logs
pip-log.txt
# Unit test / coverage reports
.coverage
.tox
#Translations
*.mo
#Mr Developer
.mr.developer.cfg

2107
DecoderWorker.js Normal file

File diff suppressed because it is too large Load Diff

352
JOB.js Normal file
View File

@@ -0,0 +1,352 @@
/**
* CallBacks:
* __________________________________________________________________________________
* All the callback function should have one parameter:
* function(result){};
* And the result parameter will contain an array of objects that look like JOB.
* result = [{Format: the barcode type, Value: the value of the barcode}];
* __________________________________________________________________________________
*
* You can use either the set functions or just access the properties directly to set callback or
* other properties. Just always remember to call Init() before starting to decode something never mess
* around with the SupportedFormats property.
*
*/
JOB = {
Config : {
// Set to false if the decoder should look for one barcode and then stop. Increases performance.
Multiple : true,
// The formats that the decoder will look for.
DecodeFormats : ["Code128","Code93","Code39","EAN-13", "2Of5", "Inter2Of5", "Codabar"],
// ForceUnique just must makes sure that the callback function isn't repeatedly called
// with the same barcode. Especially in the case of a video stream.
ForceUnique: true,
// Set to true if information about the localization should be recieved from the worker.
LocalizationFeedback: false,
// Set to true if checking orientation of the image should be skipped.
// Checking orientation takes a bit of time for larger images, so if
// you are sure that the image orientation is 1 you should skip it.
SkipOrientation : false
},
SupportedFormats : ["Code128","Code93","Code39","EAN-13", "2Of5", "Inter2Of5", "Codabar"],// Don't touch.
ScanCanvas : null, // Don't touch the canvas either.
ScanContext : null,
SquashCanvas : document.createElement("canvas"),
ImageCallback : null, // Callback for the decoding of an image.
StreamCallback : null, // Callback for the decoding of a video.
LocalizationCallback : null, // Callback for localization.
Stream : null, // The actual video.
DecodeStreamActive : false, // Will be set to false when StopStreamDecode() is called.
Decoded : [], // Used to enfore the ForceUnique property.
DecoderWorker : new Worker("DecoderWorker.js"),
OrientationCallback : null,
// Always call the Init().
Init : function() {
JOB.ScanCanvas = JOB.FixCanvas(document.createElement("canvas"));
JOB.ScanCanvas.width = 640;
JOB.ScanCanvas.height = 480;
JOB.ScanContext = JOB.ScanCanvas.getContext("2d");
var script = document.createElement('script');
script.src = "exif.js";
script.type = 'text/javascript';
document.getElementsByTagName('head').item(0).appendChild(script);
},
// Value should be true or false.
SetRotationSkip : function(value) {
JOB.Config.SkipOrientation = value;
},
// Sets the callback function for the image decoding.
SetImageCallback : function(callBack) {
JOB.ImageCallback = callBack;
},
// Sets the callback function for the video decoding.
SetStreamCallback : function(callBack) {
JOB.StreamCallback = callBack;
},
// Sets callback for localization, the callback function should take one argument.
// This will be an array with objects with format.
// {x, y, width, height}
// This represents a localization rectangle.
// The rectangle comes from a 320, 240 area i.e the search canvas.
SetLocalizationCallback : function(callBack) {
JOB.LocalizationCallback = callBack;
JOB.Config.LocalizationFeedback = true;
},
// Set to true if LocalizationCallback is set and you would like to
// receive the feedback or false if
SwitchLocalizationFeedback : function(bool) {
JOB.Config.LocalizationFeedback = bool;
},
// Switches for changing the Multiple property.
DecodeSingleBarcode : function() {
JOB.Config.Multiple = false;
},
DecodeMultiple : function() {
JOB.Config.Multiple = true;
},
// Sets the formats to decode, formats should be an array of a subset of the supported formats.
SetDecodeFormats : function(formats) {
JOB.Config.DecodeFormats = [];
for(var i = 0; i < formats.length; i++) {
if(JOB.SupportedFormats.indexOf(formats[i]) != -1) {
JOB.Config.DecodeFormats.push(formats[i]);
}
}
if(JOB.Config.DecodeFormats.length == 0) {
JOB.Config.DecodeFormats = JOB.SupportedFormats.slice();
}
},
// Removes a list of formats from the formats to decode.
SkipFormats : function(formats) {
for(var i = 0; i < formats.length; i++) {
var index = JOB.Config.DecodeFormats.indexOf(formats[i]);
if(index >= 0) {
JOB.Config.DecodeFormats.splice(index,1);
}
}
},
// Adds a list of formats to the formats to decode.
AddFormats : function(formats) {
for(var i = 0; i < formats.length; i++) {
if(JOB.SupportedFormats.indexOf(formats[i]) != -1) {
if(JOB.Config.DecodeFormats.indexOf(formats[i]) == -1) {
JOB.Config.DecodeFormats.push(formats[i]);
}
}
}
},
// The callback function for image decoding used internally by JOB.
JOBImageCallback : function(e) {
if(e.data.success == "localization") {
if(JOB.Config.LocalizationFeedback) {
JOB.LocalizationCallback(e.data.result);
}
return;
}
if(e.data.success == "orientationData") {
JOB.OrientationCallback(e.data.result);
return;
}
var filteredData = [];
for(var i = 0; i < e.data.result.length; i++) {
if(JOB.Decoded.indexOf(e.data.result[i].Value) == -1 || JOB.Config.ForceUnique == false) {
filteredData.push(e.data.result[i]);
if(JOB.Config.ForceUnique) JOB.Decoded.push(e.data.result[i].Value);
}
}
JOB.ImageCallback(filteredData);
JOB.Decoded = [];
},
// The callback function for stream decoding used internally by JOB.
JOBStreamCallback : function(e) {
if(e.data.success == "localization") {
if(JOB.Config.LocalizationFeedback) {
JOB.LocalizationCallback(e.data.result);
}
return;
}
if(e.data.success && JOB.DecodeStreamActive) {
var filteredData = [];
for(var i = 0; i < e.data.result; i++) {
if(JOB.Decoded.indexOf(e.data.result[i].Value) == -1 || JOB.ForceUnique == false) {
filteredData.push(e.data.result[i]);
if(JOB.ForceUnique) JOB.Decoded.push(e.data.result[i].Value);
}
}
if(filteredData.length > 0) {
JOB.StreamCallback(filteredData);
}
}
if(JOB.DecodeStreamActive) {
JOB.ScanContext.drawImage(JOB.Stream,0,0,JOB.ScanCanvas.width,JOB.ScanCanvas.height);
JOB.DecoderWorker.postMessage({
scan : JOB.ScanContext.getImageData(0,0,JOB.ScanCanvas.width,JOB.ScanCanvas.height).data,
scanWidth : JOB.ScanCanvas.width,
scanHeight : JOB.ScanCanvas.height,
multiple : JOB.Config.Multiple,
decodeFormats : JOB.Config.DecodeFormats,
cmd : "normal",
rotation : 1,
});
}
if(!JOB.DecodeStreamActive) {
JOB.Decoded = [];
}
},
// The image decoding function, image is a data source for an image or an image element.
DecodeImage : function(image) {
if(image instanceof Image || image instanceof HTMLImageElement)
{
image.exifdata = false;
if(image.complete) {
if(JOB.Config.SkipOrientation) {
JOB.JOBDecodeImage(image,1,"");
} else {
EXIF.getData(image, function(exifImage) {
var orientation = EXIF.getTag(exifImage,"Orientation");
var sceneType = EXIF.getTag(exifImage,"SceneCaptureType");
if(typeof orientation != 'number') orientation = 1;
JOB.JOBDecodeImage(exifImage,orientation,sceneType);
});
}
} else {
var img = new Image();
img.onload = function() {
if(JOB.Config.SkipOrientation) {
JOB.JOBDecodeImage(img,1,"");
} else {
EXIF.getData(this, function(exifImage) {
var orientation = EXIF.getTag(exifImage,"Orientation");
var sceneType = EXIF.getTag(exifImage,"SceneCaptureType");
if(typeof orientation != 'number') orientation = 1;
JOB.JOBDecodeImage(exifImage,orientation,sceneType);
});
}
};
img.src = image.src;
}
} else {
var img = new Image();
img.onload = function() {
if(JOB.Config.SkipOrientation) {
JOB.JOBDecodeImage(img,1,"");
} else {
EXIF.getData(this, function(exifImage) {
var orientation = EXIF.getTag(exifImage,"Orientation");
var sceneType = EXIF.getTag(exifImage,"SceneCaptureType");
if(typeof orientation != 'number') orientation = 1;
JOB.JOBDecodeImage(exifImage,orientation,sceneType);
});
}
};
img.src = image;
}
},
// Starts the decoding of a stream, the stream is a video not a blob i.e it's an element.
DecodeStream : function(stream) {
JOB.Stream = stream;
JOB.DecodeStreamActive = true;
JOB.DecoderWorker.onmessage = JOB.JOBStreamCallback;
JOB.ScanContext.drawImage(stream,0,0,JOB.ScanCanvas.width,JOB.ScanCanvas.height);
JOB.DecoderWorker.postMessage({
scan : JOB.ScanContext.getImageData(0,0,JOB.ScanCanvas.width,JOB.ScanCanvas.height).data,
scanWidth : JOB.ScanCanvas.width,
scanHeight : JOB.ScanCanvas.height,
multiple : JOB.Config.Multiple,
decodeFormats : JOB.Config.DecodeFormats,
cmd : "normal",
rotation : 1,
});
var onmessage = JOB.DecoderWorker.onmessage;
JOB.DecoderWorker.onmessage = function (data) {
onmessage(data);
if (data.data.success !== 'localization') {
console.log('onmessage', data);
}
};
},
// Stops the decoding of a stream.
StopStreamDecode : function() {
JOB.DecodeStreamActive = false;
JOB.Decoded = [];
},
JOBDecodeImage : function (image,orientation,sceneCaptureType) {
if(orientation == 8 || orientation == 6) {
if(sceneCaptureType == "Landscape" && image.width > image.height) {
orientation = 1;
JOB.ScanCanvas.width = 640;
JOB.ScanCanvas.height = 480;
} else {
JOB.ScanCanvas.width = 480;
JOB.ScanCanvas.height = 640;
}
} else {
JOB.ScanCanvas.width = 640;
JOB.ScanCanvas.height = 480;
}
JOB.DecoderWorker.onmessage = JOB.JOBImageCallback;
JOB.ScanContext.drawImage(image,0,0,JOB.ScanCanvas.width,JOB.ScanCanvas.height);
JOB.Orientation = orientation;
JOB.DecoderWorker.postMessage({
scan : JOB.ScanContext.getImageData(0,0,JOB.ScanCanvas.width,JOB.ScanCanvas.height).data,
scanWidth : JOB.ScanCanvas.width,
scanHeight : JOB.ScanCanvas.height,
multiple : JOB.Config.Multiple,
decodeFormats : JOB.Config.DecodeFormats,
cmd : "normal",
rotation : orientation,
postOrientation : JOB.PostOrientation
});
},
DetectVerticalSquash : function (img) {
var ih = img.naturalHeight;
var canvas = JOB.SquashCanvas;
canvas.width = 1;
canvas.height = ih;
var ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0);
try {
var data = ctx.getImageData(0, 0, 1, ih).data;
} catch (err) {
console.log("Cannot check verticalSquash: CORS?");
return 1;
}
var sy = 0;
var ey = ih;
var py = ih;
while (py > sy) {
var alpha = data[(py - 1) * 4 + 3];
if (alpha === 0) {
ey = py;
} else {
sy = py;
}
py = (ey + sy) >> 1;
}
var ratio = (py / ih);
return (ratio===0)?1:ratio;
},
FixCanvas : function (canvas)
{
var ctx = canvas.getContext('2d');
var drawImage = ctx.drawImage;
ctx.drawImage = function(img, sx, sy, sw, sh, dx, dy, dw, dh)
{
var vertSquashRatio = 1;
if (!!img && img.nodeName == 'IMG')
{
vertSquashRatio = JOB.DetectVerticalSquash(img);
sw || (sw = img.naturalWidth);
sh || (sh = img.naturalHeight);
}
if (arguments.length == 9)
drawImage.call(ctx, img, sx, sy, sw, sh, dx, dy, dw, dh / vertSquashRatio);
else if (typeof sw != 'undefined')
drawImage.call(ctx, img, sx, sy, sw, sh / vertSquashRatio);
else
drawImage.call(ctx, img, sx, sy);
};
return canvas;
}
};

24
README.md Normal file
View File

@@ -0,0 +1,24 @@
BarcodeReader
=============
BarcodeReader is a barcode reader for Code128, Code93, Code39, Standard/Industrial 2 of 5,
Interleaved 2 of 5, Codabar and EAN-13 barcodes in javascript.
Supports multiple barcodes in one image and detects what type of barcodes there are.
It seems that the issue with smartphones might have been one of exif orientation tags so there's a fix in BarcodeReader now and also a fix for some kind of downsampling issue for iOS.
***
If you like and/or use this project for commercial purposes consider donating to support my work.
<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=G5G3LGA8QRA6S"><img src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif" alt="PayPal - The safer, easier way to pay online!" /></a>
***
Version 1.6 is up with a completely reworked localization process and also added a BarcodeReader object to facilitate more ease of use. Just reference BarcodeReader.js, always execute a call to BarcodeReader.Init() in the beginning and then for decoding of images set callback function using BarcodeReader.SetImageCallback(callback) and then call BarcodeReader.DecodeImage(img). Also added functionality in BarcodeReader to decode a video stream for use with getUserMedia, which was the original idea. Hopefully this localization will be a significant improvement and I will in the (hopefully) near future do a rework of the decoding algorithm to make it a bit faster and more accurate.
## Change Log
### v1.6.1
- Added video support to the jQuery plugin
- Fire event when barcode is decoded
- Refactored jQuery elements allowing support for your own
- Flipped video to make it easier to position the barcode

BIN
Sample-images/001.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

BIN
Sample-images/03.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

BIN
Sample-images/04.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
Sample-images/05.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

BIN
Sample-images/06 (2).jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
Sample-images/06.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
Sample-images/07 (2).jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

BIN
Sample-images/07.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

BIN
Sample-images/08 (2).jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

BIN
Sample-images/08.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

BIN
Sample-images/1 (2).JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

BIN
Sample-images/1.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
Sample-images/1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
Sample-images/10 (2).JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

BIN
Sample-images/10.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

BIN
Sample-images/11.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

BIN
Sample-images/12 (2).jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
Sample-images/13 (2).jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

BIN
Sample-images/13 (3).jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

BIN
Sample-images/13 (4).jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
Sample-images/13.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
Sample-images/14 (2).jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

BIN
Sample-images/14.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
Sample-images/15 (2).JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

BIN
Sample-images/15 (3).jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
Sample-images/15.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

BIN
Sample-images/16.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

BIN
Sample-images/17.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
Sample-images/1D2D.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

BIN
Sample-images/2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
Sample-images/2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

BIN
Sample-images/20 (2).JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

BIN
Sample-images/20.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

BIN
Sample-images/20.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 KiB

BIN
Sample-images/21 (2).jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
Sample-images/21.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

BIN
Sample-images/23.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

BIN
Sample-images/24.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

BIN
Sample-images/24.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

BIN
Sample-images/25.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

BIN
Sample-images/26.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

BIN
Sample-images/27.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
Sample-images/28.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

BIN
Sample-images/2of5-1.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
Sample-images/2of5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
Sample-images/30.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
Sample-images/31 (2).jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

BIN
Sample-images/31.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

BIN
Sample-images/32.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

BIN
Sample-images/33.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

BIN
Sample-images/33.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

BIN
Sample-images/34.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

BIN
Sample-images/37.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

BIN
Sample-images/38.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
Sample-images/39.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

BIN
Sample-images/4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

BIN
Sample-images/40.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

BIN
Sample-images/5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

BIN
Sample-images/7 (2).JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

BIN
Sample-images/7.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

BIN
Sample-images/8.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

BIN
Sample-images/ALPHA.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

BIN
Sample-images/Code128-C.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 301 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 301 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
Sample-images/Code39/03.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

BIN
Sample-images/Code39/06.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
Sample-images/Code39/07.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

BIN
Sample-images/Code39/08.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

BIN
Sample-images/Code39/1.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
Sample-images/Code39/10.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

BIN
Sample-images/Code39/11.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

BIN
Sample-images/Code39/12.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

BIN
Sample-images/Code39/13.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

BIN
Sample-images/Code39/14.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

BIN
Sample-images/Code39/2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
Sample-images/Code93-C.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 591 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

BIN
Sample-images/EAN-13/1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
Sample-images/EAN-13/10.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

BIN
Sample-images/EAN-13/12.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Some files were not shown because too many files have changed in this diff Show More