zxing_ffi 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +27 -0
- data/LICENSE.txt +21 -0
- data/README.md +275 -0
- data/exe/zxing-scan +6 -0
- data/lib/zxing_ffi/barcode.rb +77 -0
- data/lib/zxing_ffi/cli.rb +152 -0
- data/lib/zxing_ffi/config.rb +119 -0
- data/lib/zxing_ffi/dedupe.rb +79 -0
- data/lib/zxing_ffi/diagnostics.rb +69 -0
- data/lib/zxing_ffi/dpi.rb +103 -0
- data/lib/zxing_ffi/errors.rb +69 -0
- data/lib/zxing_ffi/formats.rb +207 -0
- data/lib/zxing_ffi/geometry.rb +508 -0
- data/lib/zxing_ffi/header_probe.rb +98 -0
- data/lib/zxing_ffi/image.rb +123 -0
- data/lib/zxing_ffi/image_magick.rb +95 -0
- data/lib/zxing_ffi/library_defaults.rb +7 -0
- data/lib/zxing_ffi/library_loader.rb +176 -0
- data/lib/zxing_ffi/loaders/base.rb +155 -0
- data/lib/zxing_ffi/loaders/image_magick.rb +159 -0
- data/lib/zxing_ffi/loaders/pnm.rb +113 -0
- data/lib/zxing_ffi/loaders/poppler.rb +260 -0
- data/lib/zxing_ffi/loaders/registry.rb +54 -0
- data/lib/zxing_ffi/loaders/vips.rb +332 -0
- data/lib/zxing_ffi/loaders.rb +41 -0
- data/lib/zxing_ffi/native.rb +237 -0
- data/lib/zxing_ffi/pnm.rb +676 -0
- data/lib/zxing_ffi/reader.rb +271 -0
- data/lib/zxing_ffi/scanner.rb +295 -0
- data/lib/zxing_ffi/sniffer.rb +155 -0
- data/lib/zxing_ffi/source.rb +77 -0
- data/lib/zxing_ffi/strategy.rb +293 -0
- data/lib/zxing_ffi/subprocess.rb +416 -0
- data/lib/zxing_ffi/transformers/base.rb +69 -0
- data/lib/zxing_ffi/transformers/image_magick.rb +72 -0
- data/lib/zxing_ffi/transformers/vips.rb +85 -0
- data/lib/zxing_ffi/transformers.rb +36 -0
- data/lib/zxing_ffi/version.rb +5 -0
- data/lib/zxing_ffi.rb +82 -0
- metadata +108 -0
data/lib/zxing_ffi.rb
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "zxing_ffi/version"
|
|
4
|
+
require_relative "zxing_ffi/errors"
|
|
5
|
+
require_relative "zxing_ffi/config"
|
|
6
|
+
|
|
7
|
+
# Read barcodes from images and PDFs with zxing-cpp, bound through its C API with the ffi gem.
|
|
8
|
+
#
|
|
9
|
+
# @example
|
|
10
|
+
# ZXingFFI.scan("invoice.pdf") # => [#<data ZXingFFI::Barcode ...>, ...]
|
|
11
|
+
module ZXingFFI
|
|
12
|
+
autoload :LibraryLoader, "zxing_ffi/library_loader"
|
|
13
|
+
autoload :Native, "zxing_ffi/native"
|
|
14
|
+
autoload :Formats, "zxing_ffi/formats"
|
|
15
|
+
autoload :Image, "zxing_ffi/image"
|
|
16
|
+
autoload :Reader, "zxing_ffi/reader"
|
|
17
|
+
autoload :LIBRARY_DEFAULTS, "zxing_ffi/library_defaults"
|
|
18
|
+
autoload :Barcode, "zxing_ffi/barcode"
|
|
19
|
+
autoload :Geometry, "zxing_ffi/geometry"
|
|
20
|
+
autoload :Point, "zxing_ffi/geometry"
|
|
21
|
+
autoload :Quad, "zxing_ffi/geometry"
|
|
22
|
+
autoload :Dedupe, "zxing_ffi/dedupe"
|
|
23
|
+
autoload :Pnm, "zxing_ffi/pnm"
|
|
24
|
+
autoload :Sniffer, "zxing_ffi/sniffer"
|
|
25
|
+
autoload :HeaderProbe, "zxing_ffi/header_probe"
|
|
26
|
+
autoload :Subprocess, "zxing_ffi/subprocess"
|
|
27
|
+
autoload :ImageMagick, "zxing_ffi/image_magick"
|
|
28
|
+
autoload :Dpi, "zxing_ffi/dpi"
|
|
29
|
+
autoload :Source, "zxing_ffi/source"
|
|
30
|
+
autoload :Loaders, "zxing_ffi/loaders"
|
|
31
|
+
autoload :Transformers, "zxing_ffi/transformers"
|
|
32
|
+
autoload :Strategy, "zxing_ffi/strategy"
|
|
33
|
+
autoload :Scanner, "zxing_ffi/scanner"
|
|
34
|
+
autoload :PageResult, "zxing_ffi/scanner"
|
|
35
|
+
autoload :Diagnostics, "zxing_ffi/diagnostics"
|
|
36
|
+
autoload :CLI, "zxing_ffi/cli"
|
|
37
|
+
|
|
38
|
+
class << self
|
|
39
|
+
# Scans every page or frame of +input+ and returns all barcodes.
|
|
40
|
+
#
|
|
41
|
+
# @param input [String, Pathname, IO, Image] a path, an IO, or a raw image
|
|
42
|
+
# @return [Array<Barcode>] ordered by page, then top-to-bottom, left-to-right
|
|
43
|
+
def scan(input, **options)
|
|
44
|
+
Scanner.new(**options).scan(input)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Streams per-page results. Returns an Enumerator without a block.
|
|
48
|
+
#
|
|
49
|
+
# @yieldparam page_result [PageResult]
|
|
50
|
+
def scan_pages(input, **options, &block)
|
|
51
|
+
return enum_for(:scan_pages, input, **options) unless block
|
|
52
|
+
|
|
53
|
+
Scanner.new(**options).scan_pages(input, &block)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Decodes a raw pixel buffer with a single pass and no pipeline.
|
|
57
|
+
#
|
|
58
|
+
# @param image [Image]
|
|
59
|
+
# @return [Array<Barcode>]
|
|
60
|
+
def read(image, **options)
|
|
61
|
+
Reader.read(image, options)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# All readable barcode formats as symbols, derived from the loaded library.
|
|
65
|
+
# @return [Array<Symbol>]
|
|
66
|
+
def formats
|
|
67
|
+
Formats.readable
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Linear (1D) readable formats, used by the rotated pass.
|
|
71
|
+
# @return [Array<Symbol>]
|
|
72
|
+
def linear_formats
|
|
73
|
+
Formats.linear
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# A Hash describing the environment: library, loaders, tools and defaults.
|
|
77
|
+
# @return [Hash]
|
|
78
|
+
def diagnostics
|
|
79
|
+
Diagnostics.collect
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: zxing_ffi
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Will Hibbard
|
|
8
|
+
bindir: exe
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: ffi
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '1.16'
|
|
19
|
+
- - "<"
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: '2'
|
|
22
|
+
type: :runtime
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
requirements:
|
|
26
|
+
- - ">="
|
|
27
|
+
- !ruby/object:Gem::Version
|
|
28
|
+
version: '1.16'
|
|
29
|
+
- - "<"
|
|
30
|
+
- !ruby/object:Gem::Version
|
|
31
|
+
version: '2'
|
|
32
|
+
description: |
|
|
33
|
+
Extracts barcodes (QR and every symbology zxing-cpp can read) from PNG, JPEG, TIFF, GIF, BMP,
|
|
34
|
+
WebP, HEIF, PNM and PDF inputs in any orientation. Binds the zxing-cpp C API with the ffi gem and
|
|
35
|
+
adds a pipeline around it: input sniffing, normalization to 8-bit grayscale, an escalating
|
|
36
|
+
sequence of decode passes, coordinate mapping, deduplication and filtering.
|
|
37
|
+
email:
|
|
38
|
+
- eng@niva.co
|
|
39
|
+
executables:
|
|
40
|
+
- zxing-scan
|
|
41
|
+
extensions: []
|
|
42
|
+
extra_rdoc_files: []
|
|
43
|
+
files:
|
|
44
|
+
- CHANGELOG.md
|
|
45
|
+
- LICENSE.txt
|
|
46
|
+
- README.md
|
|
47
|
+
- exe/zxing-scan
|
|
48
|
+
- lib/zxing_ffi.rb
|
|
49
|
+
- lib/zxing_ffi/barcode.rb
|
|
50
|
+
- lib/zxing_ffi/cli.rb
|
|
51
|
+
- lib/zxing_ffi/config.rb
|
|
52
|
+
- lib/zxing_ffi/dedupe.rb
|
|
53
|
+
- lib/zxing_ffi/diagnostics.rb
|
|
54
|
+
- lib/zxing_ffi/dpi.rb
|
|
55
|
+
- lib/zxing_ffi/errors.rb
|
|
56
|
+
- lib/zxing_ffi/formats.rb
|
|
57
|
+
- lib/zxing_ffi/geometry.rb
|
|
58
|
+
- lib/zxing_ffi/header_probe.rb
|
|
59
|
+
- lib/zxing_ffi/image.rb
|
|
60
|
+
- lib/zxing_ffi/image_magick.rb
|
|
61
|
+
- lib/zxing_ffi/library_defaults.rb
|
|
62
|
+
- lib/zxing_ffi/library_loader.rb
|
|
63
|
+
- lib/zxing_ffi/loaders.rb
|
|
64
|
+
- lib/zxing_ffi/loaders/base.rb
|
|
65
|
+
- lib/zxing_ffi/loaders/image_magick.rb
|
|
66
|
+
- lib/zxing_ffi/loaders/pnm.rb
|
|
67
|
+
- lib/zxing_ffi/loaders/poppler.rb
|
|
68
|
+
- lib/zxing_ffi/loaders/registry.rb
|
|
69
|
+
- lib/zxing_ffi/loaders/vips.rb
|
|
70
|
+
- lib/zxing_ffi/native.rb
|
|
71
|
+
- lib/zxing_ffi/pnm.rb
|
|
72
|
+
- lib/zxing_ffi/reader.rb
|
|
73
|
+
- lib/zxing_ffi/scanner.rb
|
|
74
|
+
- lib/zxing_ffi/sniffer.rb
|
|
75
|
+
- lib/zxing_ffi/source.rb
|
|
76
|
+
- lib/zxing_ffi/strategy.rb
|
|
77
|
+
- lib/zxing_ffi/subprocess.rb
|
|
78
|
+
- lib/zxing_ffi/transformers.rb
|
|
79
|
+
- lib/zxing_ffi/transformers/base.rb
|
|
80
|
+
- lib/zxing_ffi/transformers/image_magick.rb
|
|
81
|
+
- lib/zxing_ffi/transformers/vips.rb
|
|
82
|
+
- lib/zxing_ffi/version.rb
|
|
83
|
+
homepage: https://github.com/withniva/zxing_ffi
|
|
84
|
+
licenses:
|
|
85
|
+
- MIT
|
|
86
|
+
metadata:
|
|
87
|
+
homepage_uri: https://github.com/withniva/zxing_ffi
|
|
88
|
+
changelog_uri: https://github.com/withniva/zxing_ffi/blob/main/CHANGELOG.md
|
|
89
|
+
rubygems_mfa_required: 'true'
|
|
90
|
+
rdoc_options: []
|
|
91
|
+
require_paths:
|
|
92
|
+
- lib
|
|
93
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
94
|
+
requirements:
|
|
95
|
+
- - ">="
|
|
96
|
+
- !ruby/object:Gem::Version
|
|
97
|
+
version: '3.3'
|
|
98
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
99
|
+
requirements:
|
|
100
|
+
- - ">="
|
|
101
|
+
- !ruby/object:Gem::Version
|
|
102
|
+
version: '0'
|
|
103
|
+
requirements: []
|
|
104
|
+
rubygems_version: 3.6.9
|
|
105
|
+
specification_version: 4
|
|
106
|
+
summary: Read QR codes and other barcodes from images and PDFs with zxing-cpp (via
|
|
107
|
+
FFI).
|
|
108
|
+
test_files: []
|