4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# File 'lib/img2zpl/image.rb', line 4
def to_zpl(black_threshold: 0.5, invert: false, compress: true)
bytes_per_row = (width % 8).positive? ? (width / 8) + 1 : (width / 8)
byte_count = bytes_per_row * height
data, line, previous_line, byte = '', '', '', ''
get_pixels.each do |row|
row.each_with_index do |column, i|
r, g, b = column.map(&:to_i)
b_dot, w_dot = invert ? %w(1 0) : %w(0 1)
byte << ((r + g + b) > (black_threshold * 765) ? b_dot : w_dot)
if (i % 8).zero?
line << byte.to_i(2).to_s(16).upcase.rjust(2, '0')
byte = ''
end
end
data << if compress
(line == previous_line ? ':' : line.gsub(/0+$/, ',').gsub(/F+$/, '!'))
else
line
end
previous_line = line
line = ''
end
_compress(data) if compress
"^GFA,#{byte_count},#{byte_count},#{bytes_per_row},#{data}^FS"
end
|