zebra-zpl 1.1.0 → 1.1.1
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/.gitignore +1 -1
- data/CHANGELOG.md +4 -0
- data/README.md +26 -0
- data/docs/example.rb +28 -0
- data/docs/images/image_manipulation.png +0 -0
- data/lib/zebra/zpl/image.rb +6 -0
- data/lib/zebra/zpl/version.rb +1 -1
- data/spec/zebra/zpl/image_spec.rb +70 -37
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8f71f645c261f13d07c249d0aa2185d0457eb9cd82950bccc7cece4affd4e8ae
|
4
|
+
data.tar.gz: 54584c33bbadbc85afdd1d3d6909ed2f97fb310a914fbb06937563c6382699a5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fa31bbcf69048fb620115dfd1e7da60d7c01dc366486019cccefb0d70889c4028676a539375dffec5cface9693fb00f64bf21a97ada1394847710ec60b6cf129
|
7
|
+
data.tar.gz: 0c07546694365b8549429e9690de5942f2c161703c3c5691336f44a109906fcabd8b207a123dacef94e93ecabb675011b84afdb23224e7e3497cd0e6b84cb029
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
* Your contribution here.
|
4
4
|
|
5
|
+
### 1.1.1 (12/19/2019)
|
6
|
+
|
7
|
+
* [#58](https://github.com/bbulpett/zebra-zpl/pull/58): Add access to source `Img2Zpl::Image` object - [@mtking2](https://github.com/mtking2)
|
8
|
+
|
5
9
|
### 1.1.0 (11/04/2019)
|
6
10
|
|
7
11
|
* [#54](https://github.com/bbulpett/zebra-zpl/pull/54): Fix height bug with ^B commands - [@mtking2](https://github.com/mtking2)
|
data/README.md
CHANGED
@@ -325,7 +325,10 @@ You can also create graphics elements from an image using the `Zebra::Zpl::Image
|
|
325
325
|
* `black_threshold`: A value between 0 and 1 that sets the darkness threshold which determines how dark a pixel should be in order to become black in the resulting b/w image. Use larger value for a more saturated image and smaller value for a less saturated one. Default: `0.5`
|
326
326
|
* `invert`: set to `true` to invert which pixels are set to black and which are set to white. Default is, depending on the `black_threshold`, dark pixels become black and light pixels become white.
|
327
327
|
|
328
|
+
#### Usage
|
328
329
|
```ruby
|
330
|
+
label = Zebra::Zpl::Label.new width: 600, length: 305, print_speed: 6
|
331
|
+
|
329
332
|
image = Zebra::Zpl::Image.new(
|
330
333
|
path: '/path/to/my/image.jpg',
|
331
334
|
position: [100, 50],
|
@@ -334,6 +337,29 @@ image = Zebra::Zpl::Image.new(
|
|
334
337
|
rotation: -90,
|
335
338
|
black_threshold: 0.35
|
336
339
|
)
|
340
|
+
|
341
|
+
label << image
|
342
|
+
```
|
343
|
+
**Modifying Images**
|
344
|
+
|
345
|
+
<p align="center">
|
346
|
+
<img src="docs/images/image_manipulation.png" width="500">
|
347
|
+
</p>
|
348
|
+
|
349
|
+
Image elements can also be modified in many ways before being added to the label by calling ImageMagick commands (provided by the [minimagick](https://github.com/minimagick/minimagick) & [img2zpl](https://github.com/mtking2/img2zpl) gems) on the source `Img2Zpl::Image < MiniMagick::Image` object.
|
350
|
+
|
351
|
+
**Example:** Flattening an image's layers, so it is properly converted, and then trimming out unnecessary white space around the edges:
|
352
|
+
|
353
|
+
```ruby
|
354
|
+
label = Zebra::Zpl::Label.new width: 600, length: 305, print_speed: 6
|
355
|
+
image = Zebra::Zpl::Image.new path: 'path/to/image.png', position: [0, 0]
|
356
|
+
|
357
|
+
img_src = image.source #=> instance of Img2Zpl::Image < MiniMagick::Image
|
358
|
+
|
359
|
+
img_src.flatten
|
360
|
+
img_src.trim
|
361
|
+
|
362
|
+
label << image
|
337
363
|
```
|
338
364
|
|
339
365
|
## Options
|
data/docs/example.rb
CHANGED
@@ -143,6 +143,7 @@ image = Zebra::Zpl::Image.new(
|
|
143
143
|
label << image
|
144
144
|
print_zpl_str('image', label)
|
145
145
|
|
146
|
+
# inverted image
|
146
147
|
label = new_label
|
147
148
|
image = Zebra::Zpl::Image.new(
|
148
149
|
path: File.expand_path('./images/earth.jpg', File.dirname(__FILE__)),
|
@@ -154,6 +155,33 @@ image = Zebra::Zpl::Image.new(
|
|
154
155
|
label << image
|
155
156
|
print_zpl_str('image_inverted', label)
|
156
157
|
|
158
|
+
################################################################################
|
159
|
+
# Image Manipulation
|
160
|
+
################################################################################
|
161
|
+
label = new_label
|
162
|
+
image = Zebra::Zpl::Image.new(
|
163
|
+
path: File.expand_path('./images/ruby.png', File.dirname(__FILE__)),
|
164
|
+
position: [0, 0],
|
165
|
+
width: 305,
|
166
|
+
height: 305,
|
167
|
+
black_threshold: 0.65
|
168
|
+
)
|
169
|
+
src = image.source
|
170
|
+
src.background('white').flatten
|
171
|
+
|
172
|
+
# perform edge detection on the image
|
173
|
+
MiniMagick::Tool::Convert.new do |convert|
|
174
|
+
convert << src.path
|
175
|
+
convert << '-colorspace' << 'gray'
|
176
|
+
convert << '-edge' << '4'
|
177
|
+
convert << '-negate'
|
178
|
+
convert << src.path
|
179
|
+
end
|
180
|
+
|
181
|
+
src.trim
|
182
|
+
|
183
|
+
label << image
|
184
|
+
print_zpl_str('image_manipulation', label)
|
157
185
|
|
158
186
|
################################################################################
|
159
187
|
# Justification
|
Binary file
|
data/lib/zebra/zpl/image.rb
CHANGED
data/lib/zebra/zpl/version.rb
CHANGED
@@ -61,7 +61,7 @@ describe Zebra::Zpl::Image do
|
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
|
-
|
64
|
+
context "instance methods" do
|
65
65
|
let(:valid_attributes) { {
|
66
66
|
path: 'spec/fixtures/default.jpg',
|
67
67
|
position: [50, 50],
|
@@ -69,45 +69,78 @@ describe Zebra::Zpl::Image do
|
|
69
69
|
height: 150
|
70
70
|
}}
|
71
71
|
let(:image) { described_class.new valid_attributes }
|
72
|
-
let(:tokens) { image.to_zpl.split(/(\^[A-Z]+|\,)/).reject{ |e| ['', ',', nil].include?(e) } }
|
73
72
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
73
|
+
describe '#source' do
|
74
|
+
it 'returns an Img2Zpl::Image object' do
|
75
|
+
expect(image.source.class).to eq Img2Zpl::Image
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'responds to ImageMagick (MiniMagick::Image) commands' do
|
79
|
+
attr = valid_attributes
|
80
|
+
attr.delete(:width)
|
81
|
+
attr.delete(:height)
|
82
|
+
img = described_class.new attr
|
83
|
+
src = img.src
|
84
|
+
expect(src.respond_to?(:resize)).to be true
|
85
|
+
expect(src.respond_to?(:trim)).to be true
|
86
|
+
expect(src.respond_to?(:crop)).to be true
|
87
|
+
expect(src.respond_to?(:flatten)).to be true
|
88
|
+
expect(src.respond_to?(:rotate)).to be true
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'properly manipulates the image with ImageMagick (MiniMagick::Image) commands' do
|
92
|
+
attr = valid_attributes
|
93
|
+
attr.delete(:width)
|
94
|
+
attr.delete(:height)
|
95
|
+
img = described_class.new attr
|
96
|
+
|
97
|
+
img.source.resize '123x'
|
98
|
+
expect(img.width).to eq 123
|
99
|
+
img.source.resize 'x321'
|
100
|
+
expect(img.height).to eq 321
|
101
|
+
end
|
79
102
|
end
|
80
103
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
104
|
+
describe '#to_zpl' do
|
105
|
+
let(:tokens) { image.to_zpl.split(/(\^[A-Z]+|\,)/).reject{ |e| ['', ',', nil].include?(e) } }
|
106
|
+
|
107
|
+
it 'raises an error if the X position is not given' do
|
108
|
+
qrcode = described_class.new position: [nil, 50]
|
109
|
+
expect {
|
110
|
+
qrcode.to_zpl
|
111
|
+
}.to raise_error(Zebra::Zpl::Printable::MissingAttributeError, "Can't print if the X value is not given")
|
112
|
+
end
|
113
|
+
|
114
|
+
it 'raises an error if the Y position is not given' do
|
115
|
+
qrcode = described_class.new position: [50, nil]
|
116
|
+
expect {
|
117
|
+
qrcode.to_zpl
|
118
|
+
}.to raise_error(Zebra::Zpl::Printable::MissingAttributeError, "Can't print if the Y value is not given")
|
119
|
+
end
|
120
|
+
|
121
|
+
it 'raises an error if the path is not given' do
|
122
|
+
valid_attributes.delete :path
|
123
|
+
|
124
|
+
expect {
|
125
|
+
image.to_zpl
|
126
|
+
}.to raise_error(Zebra::Zpl::Printable::MissingAttributeError, "Can't print if the path is invalid or not given")
|
127
|
+
end
|
128
|
+
|
129
|
+
it "contains the Graphics Field command '^GF'" do
|
130
|
+
expect(image.to_zpl).to match /\^GF/
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'contains the X position' do
|
134
|
+
expect(tokens[1]).to eq '50'
|
135
|
+
end
|
136
|
+
|
137
|
+
it 'contains the Y position' do
|
138
|
+
expect(tokens[2]).to eq '50'
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'contains the properly encoded image' do
|
142
|
+
expect(tokens[3..-1].join).to eq '^GFA1079107913:::::K078Q03J07FF8P038I01JFP078I03JF8O0FCI0KFCO0FC001KFEN01FE003LFN01FE003LF8M03FF007LFCM03FF8007LFCM07FF800MFCM0IFC00MFEM0IFC00MFEL01IFE01MFEL01IFE01MFEL03JF01NFL07JF8:01NFL0KFC:01MFEK01KFE00MFEK01LF00MFEK03LF00MFEK07LF8007LFCK07LF8007LFCK0MFC003LF8K0MFC003LFK01MFE001KFEK01NFI0KFCK03NFI07JF8K07NF8I01JFL04N08J07FFCK0FC::::::N01MFE:::::::::::::::::::::::::::::::::::^FS'
|
143
|
+
end
|
86
144
|
end
|
87
|
-
|
88
|
-
it 'raises an error if the path is not given' do
|
89
|
-
valid_attributes.delete :path
|
90
|
-
|
91
|
-
expect {
|
92
|
-
image.to_zpl
|
93
|
-
}.to raise_error(Zebra::Zpl::Printable::MissingAttributeError, "Can't print if the path is invalid or not given")
|
94
|
-
end
|
95
|
-
|
96
|
-
it "contains the Graphics Field command '^GF'" do
|
97
|
-
expect(image.to_zpl).to match /\^GF/
|
98
|
-
end
|
99
|
-
|
100
|
-
it 'contains the X position' do
|
101
|
-
expect(tokens[1]).to eq '50'
|
102
|
-
end
|
103
|
-
|
104
|
-
it 'contains the Y position' do
|
105
|
-
expect(tokens[2]).to eq '50'
|
106
|
-
end
|
107
|
-
|
108
|
-
it 'contains the properly encoded image' do
|
109
|
-
expect(tokens[3..-1].join).to eq '^GFA1079107913:::::M0FR06L0IFQ07K03IFEP0FK07JFO01F8J01KF8N01F8J03KFCN03FCJ07KFEN03FCJ07LFN07FEJ0MF8M07HFJ0MF8M0IFI01MF8L01IF8I01MFCL01IF8I01MFCL03IFCI03MFCL03IFCI03MFCL07IFEI03MFEL0KF:I03MFEK01KF8:I03MFCK03KFCI01MFCK03KFEI01MFCK07KFEI01MFCK0MFJ0MF8K0MFJ0MF8J01MF8J07LFK01MF8J07KFEK03MFCJ03KFCK03MFEJ01KF8K07MFEK0KFL0OFK03IFEL08M01L0IF8L01F8::::::P03MFC:::::::::::::::::::::::::::::::::::^FS'
|
110
|
-
end
|
111
|
-
|
112
145
|
end
|
113
146
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zebra-zpl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Barnabas Bulpett
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2019-
|
13
|
+
date: 2019-12-19 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: img2zpl
|
@@ -122,6 +122,7 @@ files:
|
|
122
122
|
- docs/images/graphics.png
|
123
123
|
- docs/images/image.png
|
124
124
|
- docs/images/image_inverted.png
|
125
|
+
- docs/images/image_manipulation.png
|
125
126
|
- docs/images/images.png
|
126
127
|
- docs/images/justification.png
|
127
128
|
- docs/images/qrcode.png
|