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.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +27 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +275 -0
  5. data/exe/zxing-scan +6 -0
  6. data/lib/zxing_ffi/barcode.rb +77 -0
  7. data/lib/zxing_ffi/cli.rb +152 -0
  8. data/lib/zxing_ffi/config.rb +119 -0
  9. data/lib/zxing_ffi/dedupe.rb +79 -0
  10. data/lib/zxing_ffi/diagnostics.rb +69 -0
  11. data/lib/zxing_ffi/dpi.rb +103 -0
  12. data/lib/zxing_ffi/errors.rb +69 -0
  13. data/lib/zxing_ffi/formats.rb +207 -0
  14. data/lib/zxing_ffi/geometry.rb +508 -0
  15. data/lib/zxing_ffi/header_probe.rb +98 -0
  16. data/lib/zxing_ffi/image.rb +123 -0
  17. data/lib/zxing_ffi/image_magick.rb +95 -0
  18. data/lib/zxing_ffi/library_defaults.rb +7 -0
  19. data/lib/zxing_ffi/library_loader.rb +176 -0
  20. data/lib/zxing_ffi/loaders/base.rb +155 -0
  21. data/lib/zxing_ffi/loaders/image_magick.rb +159 -0
  22. data/lib/zxing_ffi/loaders/pnm.rb +113 -0
  23. data/lib/zxing_ffi/loaders/poppler.rb +260 -0
  24. data/lib/zxing_ffi/loaders/registry.rb +54 -0
  25. data/lib/zxing_ffi/loaders/vips.rb +332 -0
  26. data/lib/zxing_ffi/loaders.rb +41 -0
  27. data/lib/zxing_ffi/native.rb +237 -0
  28. data/lib/zxing_ffi/pnm.rb +676 -0
  29. data/lib/zxing_ffi/reader.rb +271 -0
  30. data/lib/zxing_ffi/scanner.rb +295 -0
  31. data/lib/zxing_ffi/sniffer.rb +155 -0
  32. data/lib/zxing_ffi/source.rb +77 -0
  33. data/lib/zxing_ffi/strategy.rb +293 -0
  34. data/lib/zxing_ffi/subprocess.rb +416 -0
  35. data/lib/zxing_ffi/transformers/base.rb +69 -0
  36. data/lib/zxing_ffi/transformers/image_magick.rb +72 -0
  37. data/lib/zxing_ffi/transformers/vips.rb +85 -0
  38. data/lib/zxing_ffi/transformers.rb +36 -0
  39. data/lib/zxing_ffi/version.rb +5 -0
  40. data/lib/zxing_ffi.rb +82 -0
  41. 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: []