img2zpl 0.1.1 → 0.1.2
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 +4 -4
- data/CHANGELOG.md +15 -0
- data/CONTRIBUTING.md +43 -0
- data/Gemfile +2 -3
- data/LICENSE +1 -1
- data/README.md +27 -0
- data/lib/img2zpl/image.rb +34 -5
- data/lib/img2zpl/version.rb +1 -1
- data/spec/img2zpl/image_spec.rb +57 -2
- data/spec/spec_helper.rb +4 -0
- metadata +4 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7c8010c3b5133ed81279c44419a584d87ab6b54d1777efec3c9c7c52e556b23b
|
|
4
|
+
data.tar.gz: 17200af08ebff21cac5f15e0d09c89dc765e3d0487379ffd69958582095be77d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7e0e621ec3a4dc11c2399d8808b02f750be6da3a9c2b67e9e909e186f2adc1d020e31690e51809b9e9d8740ee04bbeced89638b4b2eed361af654b98e25d8410
|
|
7
|
+
data.tar.gz: 3cda926725cc62f06e62da712fc56db9c98a179b1c1480871212aaceee872d918f622c45f8c0ec17000bd873f16ec11cca7617480d4e8816a726de65ef50c3ac
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
### v0.x.x (next)
|
|
2
|
+
|
|
3
|
+
* Your contribution here.
|
|
4
|
+
|
|
5
|
+
### v0.1.2 (2019/10/10)
|
|
6
|
+
|
|
7
|
+
* [#3](https://github.com/mtking2/img2zpl/pull/3): Add ASCII compression to conversion - [@mtking2](https://github.com/mtking2).
|
|
8
|
+
|
|
9
|
+
### v0.1.1 (2019/10/09)
|
|
10
|
+
|
|
11
|
+
* [#2](https://github.com/mtking2/img2zpl/pull/2): Rename primary conversion method `.zpl` --> `.to_zpl` - [@mtking2](https://github.com/mtking2).
|
|
12
|
+
|
|
13
|
+
### v0.1.0 (2019/10/08)
|
|
14
|
+
* [#1](https://github.com/mtking2/img2zpl/pull/1): Add functioning algorithm - [@mtking2](https://github.com/mtking2).
|
|
15
|
+
* Initial public release - [@mtking2](https://github.com/mtking2).
|
data/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
## Contributing
|
|
2
|
+
|
|
3
|
+
### Fork & clone the repository
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
git clone git@github.com:<your-username>/img2zpl.git
|
|
7
|
+
cd img2zpl
|
|
8
|
+
git remote add upstream git@github.com:mtking2/img2zpl.git
|
|
9
|
+
bundle install
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Then check out a working branch:
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
git checkout <my-working-branch>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### Write tests
|
|
19
|
+
|
|
20
|
+
This project uses `rspec`. After writing your tests, you can run tests with the following command:
|
|
21
|
+
|
|
22
|
+
`bundle exec rspec`
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Write code
|
|
26
|
+
|
|
27
|
+
Write your code to make your tests pass.
|
|
28
|
+
|
|
29
|
+
### Update the CHANGELOG with a description and your name
|
|
30
|
+
|
|
31
|
+
Update the CHANGELOG with the description of your code changes and your name on the line after `"* Your contribution here"`.
|
|
32
|
+
|
|
33
|
+
### Push your changes and open a pull request
|
|
34
|
+
|
|
35
|
+
Push you changes to your working branch.
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
git push origin <my-working-branch>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Open a pull request against upstream master and your working branch. Give a brief description of what your PR does and explain what the code changes do.
|
|
42
|
+
|
|
43
|
+
Thank you!
|
data/Gemfile
CHANGED
data/LICENSE
CHANGED
data/README.md
CHANGED
|
@@ -5,9 +5,36 @@
|
|
|
5
5
|
|
|
6
6
|
Ruby library to convert images to usable & printable ZPL code
|
|
7
7
|
|
|
8
|
+
### Installation
|
|
9
|
+
|
|
10
|
+
Add the gem to your Gemfile:
|
|
11
|
+
```
|
|
12
|
+
gem 'img2zpl'
|
|
13
|
+
```
|
|
14
|
+
And then run `bundle install`
|
|
15
|
+
|
|
16
|
+
Or install it yourself with:
|
|
17
|
+
```
|
|
18
|
+
gem install img2zpl
|
|
19
|
+
```
|
|
20
|
+
|
|
8
21
|
### Usage
|
|
9
22
|
|
|
10
23
|
```ruby
|
|
24
|
+
require 'img2zpl'
|
|
25
|
+
|
|
11
26
|
img = Img2Zpl::Image.open('foo.jpg')
|
|
12
27
|
zpl = img.to_zpl #=> "^FO0,0^GFA, ... ^FS"
|
|
13
28
|
```
|
|
29
|
+
|
|
30
|
+
### Contributing
|
|
31
|
+
|
|
32
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
33
|
+
|
|
34
|
+
#### [Changelog](CHANGELOG.md)
|
|
35
|
+
|
|
36
|
+
### Copyright
|
|
37
|
+
|
|
38
|
+
Copyright © 2019, [Michael King](https://twitter.com/_mtking2) and [Contributors](CHANGELOG.md).
|
|
39
|
+
|
|
40
|
+
MIT License, see [LICENSE](https://github.com/mtking2/img2zpl/blob/master/LICENSE)
|
data/lib/img2zpl/image.rb
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
class Img2Zpl::Image < MiniMagick::Image
|
|
2
2
|
|
|
3
|
-
def to_zpl(black_threshold: 0.5)
|
|
3
|
+
def to_zpl(black_threshold: 0.5, compress: true)
|
|
4
4
|
bytes_per_row = (width % 8).positive? ? (width / 8) + 1 : (width / 8)
|
|
5
5
|
byte_count = bytes_per_row * height
|
|
6
6
|
data, line, previous_line, byte = '', '', '', ''
|
|
7
7
|
|
|
8
8
|
get_pixels.each do |row|
|
|
9
|
-
|
|
10
9
|
row.each_with_index do |column, i|
|
|
11
10
|
r, g, b = column.map(&:to_i)
|
|
12
11
|
byte << ((r + g + b) > (black_threshold * 765) ? '0' : '1')
|
|
@@ -15,18 +14,48 @@ class Img2Zpl::Image < MiniMagick::Image
|
|
|
15
14
|
byte = ''
|
|
16
15
|
end
|
|
17
16
|
end
|
|
18
|
-
|
|
17
|
+
|
|
18
|
+
data << if compress
|
|
19
|
+
(line == previous_line ? ':' : line.gsub(/0+$/, ',').gsub(/F+$/, '!'))
|
|
20
|
+
else
|
|
21
|
+
line
|
|
22
|
+
end
|
|
23
|
+
|
|
19
24
|
previous_line = line
|
|
20
25
|
line = ''
|
|
21
26
|
end
|
|
22
27
|
|
|
23
|
-
|
|
28
|
+
_compress(data) if compress
|
|
29
|
+
"^GFA,#{byte_count},#{byte_count},#{bytes_per_row},#{data}^FS"
|
|
24
30
|
end
|
|
25
31
|
|
|
26
32
|
private
|
|
27
33
|
|
|
28
34
|
def _compression_map
|
|
29
|
-
|
|
35
|
+
map = {}
|
|
36
|
+
start = 'G'.ord
|
|
37
|
+
19.times { |i| map[i + 1] = (start+i).chr }
|
|
38
|
+
start = 'g'.ord
|
|
39
|
+
(20..400).step(20).each_with_index { |i, j| map[i] = (start+j).chr }
|
|
40
|
+
map
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def _reduce(n)
|
|
44
|
+
str = ''
|
|
45
|
+
counts = _compression_map.keys.sort.reverse
|
|
46
|
+
counts.each do |c|
|
|
47
|
+
if c <= n
|
|
48
|
+
str << (_compression_map[c])
|
|
49
|
+
n -= c
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
str
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def _compress(data)
|
|
56
|
+
data.gsub!(/([\da-zA-Z])(\1+)/) do |m|
|
|
57
|
+
"#{_reduce(m.length)}#{$1}"
|
|
58
|
+
end
|
|
30
59
|
end
|
|
31
60
|
|
|
32
61
|
end
|
data/lib/img2zpl/version.rb
CHANGED
data/spec/img2zpl/image_spec.rb
CHANGED
|
@@ -4,13 +4,68 @@ describe Img2Zpl::Image do
|
|
|
4
4
|
|
|
5
5
|
subject { described_class.open('spec/fixtures/default.jpg') }
|
|
6
6
|
|
|
7
|
-
it '
|
|
7
|
+
it 'should inherit from the MiniMagick::Image class' do
|
|
8
8
|
expect(described_class.respond_to?(:open)).to be true
|
|
9
9
|
expect(described_class.respond_to?(:read)).to be true
|
|
10
10
|
expect(subject.respond_to?(:to_zpl)).to be true
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
-
it '
|
|
13
|
+
it 'should have the compression map' do
|
|
14
|
+
map = subject.send(:_compression_map)
|
|
15
|
+
expect(map[1]).to eq 'G'
|
|
16
|
+
expect(map[2]).to eq 'H'
|
|
17
|
+
expect(map[3]).to eq 'I'
|
|
18
|
+
expect(map[4]).to eq 'J'
|
|
19
|
+
expect(map[5]).to eq 'K'
|
|
20
|
+
expect(map[6]).to eq 'L'
|
|
21
|
+
expect(map[7]).to eq 'M'
|
|
22
|
+
expect(map[8]).to eq 'N'
|
|
23
|
+
expect(map[9]).to eq 'O'
|
|
24
|
+
expect(map[10]).to eq 'P'
|
|
25
|
+
expect(map[11]).to eq 'Q'
|
|
26
|
+
expect(map[12]).to eq 'R'
|
|
27
|
+
expect(map[13]).to eq 'S'
|
|
28
|
+
expect(map[14]).to eq 'T'
|
|
29
|
+
expect(map[15]).to eq 'U'
|
|
30
|
+
expect(map[16]).to eq 'V'
|
|
31
|
+
expect(map[17]).to eq 'W'
|
|
32
|
+
expect(map[18]).to eq 'X'
|
|
33
|
+
expect(map[19]).to eq 'Y'
|
|
34
|
+
expect(map[20]).to eq 'g'
|
|
35
|
+
expect(map[40]).to eq 'h'
|
|
36
|
+
expect(map[60]).to eq 'i'
|
|
37
|
+
expect(map[80]).to eq 'j'
|
|
38
|
+
expect(map[100]).to eq 'k'
|
|
39
|
+
expect(map[120]).to eq 'l'
|
|
40
|
+
expect(map[140]).to eq 'm'
|
|
41
|
+
expect(map[160]).to eq 'n'
|
|
42
|
+
expect(map[180]).to eq 'o'
|
|
43
|
+
expect(map[200]).to eq 'p'
|
|
44
|
+
expect(map[220]).to eq 'q'
|
|
45
|
+
expect(map[240]).to eq 'r'
|
|
46
|
+
expect(map[260]).to eq 's'
|
|
47
|
+
expect(map[280]).to eq 't'
|
|
48
|
+
expect(map[300]).to eq 'u'
|
|
49
|
+
expect(map[320]).to eq 'v'
|
|
50
|
+
expect(map[340]).to eq 'w'
|
|
51
|
+
expect(map[360]).to eq 'x'
|
|
52
|
+
expect(map[380]).to eq 'y'
|
|
53
|
+
expect(map[400]).to eq 'z'
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it 'should properly compress ASCII data' do
|
|
57
|
+
d1 = '00000000000000000000000000000000000000000000000000000000008'
|
|
58
|
+
d2 = '5555555555555ADDDDDDDDDDDDDDDDDDDDDDD'
|
|
59
|
+
d3 = '00000000FFFFFFFFFFFFFFFFFFFFFFC0000000000000000000007FFFFFFFFF'
|
|
60
|
+
subject.send(:_compress, d1)
|
|
61
|
+
subject.send(:_compress, d2)
|
|
62
|
+
subject.send(:_compress, d3)
|
|
63
|
+
expect(d1).to eq 'hX08'
|
|
64
|
+
expect(d2).to eq 'S5AgID'
|
|
65
|
+
expect(d3).to eq 'N0gHFCgG07OF'
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it 'should return a string when calling .to_zpl' do
|
|
14
69
|
expect(subject.to_zpl).to be_kind_of String
|
|
15
70
|
end
|
|
16
71
|
|
data/spec/spec_helper.rb
CHANGED
|
@@ -14,6 +14,10 @@
|
|
|
14
14
|
#
|
|
15
15
|
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
|
16
16
|
require 'img2zpl'
|
|
17
|
+
require 'byebug'
|
|
18
|
+
require 'pry'
|
|
19
|
+
require 'pry-nav'
|
|
20
|
+
|
|
17
21
|
|
|
18
22
|
RSpec.configure do |config|
|
|
19
23
|
# rspec-expectations config goes here. You can use an alternate
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: img2zpl
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Michael King
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-10-
|
|
11
|
+
date: 2019-10-11 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: mini_magick
|
|
@@ -60,6 +60,8 @@ extra_rdoc_files: []
|
|
|
60
60
|
files:
|
|
61
61
|
- ".gitignore"
|
|
62
62
|
- ".rspec"
|
|
63
|
+
- CHANGELOG.md
|
|
64
|
+
- CONTRIBUTING.md
|
|
63
65
|
- Gemfile
|
|
64
66
|
- LICENSE
|
|
65
67
|
- README.md
|