stitchify 0.1.3 → 0.2.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fabe4da3f056ddc450e8cc6cd31d1711ab5d99ad
4
- data.tar.gz: d4a5381f7a0a36219fa70c22fbbd3c73372fba4f
3
+ metadata.gz: 7566ac54885d62ccd4d9da595890b392e6d60b9e
4
+ data.tar.gz: c7036ec503541d34cdef582cb3b72911a072169b
5
5
  SHA512:
6
- metadata.gz: f9ba66eb51de13e0e01839f20788664c40877ffaf972c8586186ad0ce4e0f9f950dcb11812e226be59bb30ce19caf15b26dc454bd8e6b06c1e144fdffd6128df
7
- data.tar.gz: dd8fdb4c3bb93ed32891d6ec253dfa0976ba91ef01fc2a41c0bea8504ce01e7717006054d2919c637de1ff2eaf1ed9a462ec7d27e0f075f6f6e9312c99161898
6
+ metadata.gz: d2f411cfa0219988b2187b8cd1b831c2df4748e111457657689acca81ecf5229daf49614aea2e2d4f8256ff91a43da721d4b86bec836d1dda7b951de19dd7efd
7
+ data.tar.gz: 57ba44e163b9c1f65ef02e9f15fb49eedf4b771c1e5d54c201da10fae01ef6e64e727dc3e17acaa35ce335a89908ef01f4de01dc6667c93669ee96502aead611
@@ -1,287 +1,158 @@
1
- class Stitchifier
2
- require 'nokogiri'
3
- require 'open-uri'
4
- require 'pry'
5
- require 'rasem'
6
- require 'asciiart'
7
- require 'hex256'
8
-
9
- OPEN_BRACKET = "\e[38;5;"
10
- CLOSE_BRACKET = "\e[0m"
11
-
12
- attr_accessor :px, :pos_x, :pos_y, :width, :height, :ascii_width
13
-
14
- def initialize(px = 10, ascii_width = nil)
15
- self.px = px
16
- self.pos_x = 0
17
- self.pos_y = 0
18
- self.width = 4 * px
19
- self.height = 4 * px
20
- self.ascii_width = ascii_width
21
- end
22
-
23
- def stitch(img, file = 'stitchify.svg')
24
- ascii = img_processor(img)
25
- arrs = paragraph_builder(ascii)
26
- rasem = arrs_to_rasem(arrs, grid)
27
- write(rasem, file)
28
- clear_vars
29
- end
30
-
31
- def stitch_to_output(img)
32
- ascii = img_processor(img)
33
- arrs = paragraph_builder(ascii)
34
- ret = arrs_to_rasem(arrs, grid).to_s
35
- clear_vars
36
- ret
37
- end
38
-
39
- # ".~:+=o*x^%#@$MW\n .~:+=o*x^%#@$M\nW.~:+=o*x^% #@$MW"
40
-
41
- def stitch_string(str, file = 'stitchify.svg')
42
- arrs = paragraph_builder(str)
43
- rasem = arrs_to_rasem(arrs, grid)
44
- write(rasem, file)
45
- clear_vars
46
- end
47
-
48
- def clear_vars
49
- self.pos_x = 0
50
- self.pos_y = 0
51
- self.width = 0
52
- self.height = 0
53
- end
54
-
55
- def ascii_conditions
56
- ret = {}
57
- ret[:color] = true
58
- ret[:width] = self.ascii_width unless self.ascii_width.nil?
59
- ret
60
- end
61
-
62
- def img_processor(img)
63
- AsciiArt.new(img).to_ascii_art(ascii_conditions)
64
- end
65
-
66
- def arrs_to_rasem(arrs, grid)
67
- Rasem::SVGImage.new(width: self.width, height: self.height) do
68
- for line_data in arrs
69
- line line_data[0], line_data[1], line_data[2], line_data[3], :stroke_width=>2, :fill=>line_data[4], :stroke=>line_data[4]
70
- end
71
- for line_data in grid
72
- line line_data[0], line_data[1], line_data[2], line_data[3], :stroke_width=>line_data[5]
73
- end
74
- end
75
- end
76
-
77
- def write(rasem, file)
78
- File.open(file, "w") do |f|
79
- rasem.write(f)
80
- end
81
- end
82
-
83
- def grid
84
- n = 10
85
- output = []
86
- (width / n).times do |i|
87
- x = 1
88
- x = 2 if (i % 10 == 0)
89
- output << [i * n, 0, i * n, height, 'black', x]
90
- end
91
- (height / n).times do |i|
92
- x = 1
93
- x = 2 if i % 10 == 0
94
- output << [0, i * n, width, i * n, 'black', x]
95
- end
96
- output
97
- end
98
-
99
- def paragraph_builder(str)
100
- self.height = 0
101
- arr = str.split("\n")
102
- output = []
103
- arr.each do |line|
104
- output = output + line_builder(line)
105
- self.pos_y = self.pos_y + (3 * px)
106
- self.pos_x = 0
107
- self.height = self.height + (3 * px)
108
- end
109
- output
110
- end
111
-
112
- def line_builder(line)
113
- self.width = 0
114
- line_output = []
115
-
116
- l = line.split(OPEN_BRACKET)
117
-
118
- l.each do |segment|
119
-
120
- char_data = segment.split("m")
121
-
122
- # if the midpoint doesn't exist
123
- if char_data.length == 1
124
- char_data[0].chars.each do |char|
125
- line_output = line_output + char_builder(char, '#000000')
126
- self.pos_x = self.pos_x + (2 * px)
127
- self.width = self.width + (2 * px)
128
- end
129
- else
130
- char = char_data[1].delete(CLOSE_BRACKET)
131
- line_output = line_output + char_builder(char, HexConverter.ansi_to_hex(char_data[0]))
132
- self.pos_x = self.pos_x + (2 * px)
133
- self.width = self.width + (2 * px)
134
- end
135
- end
136
-
137
- line_output
138
- end
139
-
140
- def char_builder(char, hex_str)
141
- output = []
142
- case char
143
- when '.'
144
- output << pos_slope_one(1.5 * px, 2.5 * px, px, hex_str)
145
- output << neg_slope_one(1.5 * px, 1.5 * px, px, hex_str)
146
- when '~'
147
- output << pos_slope_one((0 - px / 2), 2.5 * px, px, hex_str)
148
- output << neg_slope_one(px / 2, 1.5 * px, px, hex_str)
149
- output << pos_slope_one(1.5 * px, 2.5 * px, px, hex_str)
150
- when ':'
151
- output << pos_slope_one(1.5 * px, 2.5 * px, px, hex_str)
152
- output << neg_slope_one(1.5 * px, 1.5 * px, px, hex_str)
153
- output << pos_slope_one(1.5 * px, 1.5 * px, px, hex_str)
154
- output << neg_slope_one(1.5 * px, px / 2, px, hex_str)
155
- when '+'
156
- output << vertical_line(1.5 * px, px / 2, 2 * px, hex_str)
157
- output << horizontal_line(px / 2, 1.5 * px, 2 * px, hex_str)
158
- when '='
159
- output << horizontal_line(px / 2, 1.5 * px, 2 * px, hex_str)
160
- output << horizontal_line(px / 2, 2.5 * px, 2 * px, hex_str)
161
- when 'o'
162
- output << pos_slope_one(px / 2, 1.5 * px, px, hex_str)
163
- output << neg_slope_one(1.5 * px, px / 2, px, hex_str)
164
- output << pos_slope_one(1.5 * px, 2.5 * px, px, hex_str)
165
- output << neg_slope_one(px / 2, 1.5 * px, px, hex_str)
166
- when '*'
167
- output << pos_slope_one(px / 2, 2.5 * px , 2 * px, hex_str)
168
- output << neg_slope_one(px / 2, px / 2, 2 * px, hex_str)
169
- output << vertical_line(1.5 * px, px / 2, 2 * px, hex_str)
170
- when 'x'
171
- output << pos_slope_one(px / 2, 2.5 * px , 2 * px, hex_str)
172
- output << neg_slope_one(px / 2, px / 2, 2 * px, hex_str)
173
- when '^'
174
- output << pos_slope_one(px / 2, 1.5 * px, px, hex_str)
175
- output << neg_slope_one(1.5 * px, px / 2, px, hex_str)
176
- when '%'
177
- output << pos_slope_one(px / 2, 1.5 * px, px, hex_str)
178
- output << neg_slope_one(px / 2, px / 2, px, hex_str)
179
- output << pos_slope_one(px / 2, 2.5 * px, 2 * px, hex_str)
180
- output << pos_slope_one(1.5 * px, 2.5 * px, px, hex_str)
181
- output << neg_slope_one(1.5 * px, 1.5 * px, px, hex_str)
182
- when '#'
183
- output << pos_slope_two(px / 2, 2.5 * px, px, hex_str)
184
- output << pos_slope_two(1.5 * px, 2.5 * px, px, hex_str)
185
- output << horizontal_line(px / 2, 1.5 * px, 2 * px, hex_str)
186
- output << horizontal_line(px / 2, 2.5 * px, 2 * px, hex_str)
187
- when '@'
188
- output << pos_slope_one(1.5 * px, 2.5 * px, px, hex_str)
189
- output << neg_slope_one(1.5 * px, 1.5 * px, px, hex_str)
190
- output << vertical_line(2.5 * px, px / 2, 2 * px, hex_str)
191
- output << horizontal_line(1.5 * px, px / 2, px, hex_str)
192
- output << pos_slope_one(px / 2, 1.5 * px, px, hex_str)
193
- output << neg_slope_one(px / 2, 1.5 * px, px, hex_str)
194
- output << horizontal_line(1.5 * px, 2.5 * px, px, hex_str)
195
- when '$'
196
- output << horizontal_line(px / 2, px / 2, 2 * px, hex_str)
197
- output << neg_slope_one(px / 2, px / 2, 2 * px, hex_str)
198
- output << horizontal_line(px / 2, 2.5 * px, 2 * px, hex_str)
199
- output << vertical_line(1.5 * px, px / 2, 2 * px, hex_str)
200
- when 'M'
201
- output << vertical_line(px / 2, px / 2, 2 * px, hex_str)
202
- output << neg_slope_one(px / 2, px / 2, px, hex_str)
203
- output << pos_slope_one(1.5 * px, 1.5 * px, px, hex_str)
204
- output << vertical_line(2.5 * px, px / 2, 2 * px, hex_str)
205
- when 'W'
206
- output << vertical_line(px / 2, px / 2, 2 * px, hex_str)
207
- output << pos_slope_one(px / 2, 2.5 * px, px, hex_str)
208
- output << neg_slope_one(1.5 * px, 1.5 * px, px, hex_str)
209
- output << vertical_line(2.5 * px, px / 2, 2 * px, hex_str)
210
- when '|'
211
- output << vertical_line(2.5 * px, px / 2, 2 * px, hex_str)
212
- when '-'
213
- output << horizontal_line(px / 2, 2.5 * px, 2 * px, hex_str)
214
- end
215
- output
216
- end
217
-
218
- def pos_slope_one(startX, startY, length, hex_str)
219
- [
220
- startX + pos_x,
221
- startY + pos_y,
222
- startX + pos_x + length,
223
- startY + pos_y - length,
224
- hex_str
225
- ]
226
- end
227
-
228
- def neg_slope_one(startX, startY, length, hex_str)
229
- [
230
- startX + pos_x,
231
- startY + pos_y,
232
- startX + pos_x + length,
233
- startY + pos_y + length,
234
- hex_str
235
- ]
236
- end
237
-
238
- def vertical_line(startX, startY, length, hex_str)
239
- [
240
- startX + pos_x,
241
- startY + pos_y,
242
- startX + pos_x,
243
- startY + pos_y + length,
244
- hex_str
245
- ]
246
- end
247
-
248
- def horizontal_line(startX, startY, length, hex_str)
249
- [
250
- startX + pos_x,
251
- startY + pos_y,
252
- startX + pos_x + length,
253
- startY + pos_y,
254
- hex_str
255
- ]
256
- end
257
-
258
- def pos_slope_two(startX, startY, width, hex_str)
259
- [
260
- startX + pos_x,
261
- startY + pos_y,
262
- startX + pos_x + width,
263
- startY + pos_y - (2 * width),
264
- hex_str
265
- ]
266
- end
267
-
268
- def neg_slope_half(startX, startY, height, hex_str)
269
- [
270
- startX + pos_x,
271
- startY + pos_y,
272
- startX + pos_x + (2 * height),
273
- startY + pos_y + height,
274
- hex_str
275
- ]
276
- end
277
-
278
- def neg_slope_two(startX, startY, width, hex_str)
279
- [
280
- startX + pos_x,
281
- startY + pos_y,
282
- startX + pos_x + width,
283
- startY + pos_y + (2 * width),
284
- hex_str
285
- ]
286
- end
287
- end
1
+ require 'chroma'
2
+ require 'color'
3
+ require 'miro'
4
+ require 'pry'
5
+ require 'rasem'
6
+ require 'RMagick'
7
+
8
+ require 'stitchify/draw_rasem.rb'
9
+ require 'stitchify/pixelfy.rb'
10
+
11
+ class Stitchifier
12
+ include Chroma
13
+ include Magick
14
+ include Miro
15
+
16
+ HSLA_BLACK = [0, 0, 0, 1]
17
+ HSLA_WHITE = [0, 0, 100, 1]
18
+ HSL_OPEN_CONST = "hsl("
19
+ FILLABLE_SHAPES = [
20
+ 'sm_rectangle',
21
+ 'triangle',
22
+ 'circle',
23
+ 'diamond',
24
+ 'reverse_triangle',
25
+ 'left_triangle',
26
+ 'right_triangle'
27
+ ]
28
+
29
+ attr_accessor :base_pixel_arr,
30
+ :dominant_colors,
31
+ :img,
32
+ :img_path,
33
+ :num_of_colors,
34
+ :num_of_off_colors,
35
+ :pos_x,
36
+ :pos_y,
37
+ :px,
38
+ :stitch_map,
39
+ :width
40
+
41
+ def initialize(img_path = '', width = 50, px=10, num_of_colors = 8)
42
+ # sets variables
43
+ self.num_of_colors = num_of_colors
44
+ set_num_colors
45
+ self.width = width
46
+ self.num_of_colors = num_of_colors
47
+ self.img_path = img_path
48
+ self.dominant_colors = []
49
+ self.stitch_map = []
50
+ self.px = px
51
+
52
+ unless img_path.empty?
53
+ make_img
54
+ set_dominant_colors
55
+ build_pixel_array
56
+
57
+ d = DrawRasem.new(self.stitch_map, self.width, self.px)
58
+ d.stitch
59
+ end
60
+ end
61
+
62
+ def make_img
63
+ self.img = ImageList.new(img_path).resize_to_fit(width)
64
+ end
65
+
66
+ def set_dominant_colors
67
+ color_pos = 0
68
+ colors = black_and_white
69
+ set_num_colors
70
+ if self.num_of_colors > 3 && !img_path.empty?
71
+ miro_data = Miro::DominantColors.new(self.img_path).to_hex unless self.img_path.empty?
72
+ main_color = miro_data.slice!(0, 1)[0]
73
+ miro_px = miro_data.map{|x| Pixelfy.from_hex(x)}
74
+ off_colors = build_off_color_arr(main_color)
75
+ colors = miro_px + off_colors + colors
76
+ end
77
+ colors.each do |px|
78
+ if px.shape.nil?
79
+ px.shape = FILLABLE_SHAPES[color_pos]
80
+ color_pos = (color_pos + 1) % FILLABLE_SHAPES.length
81
+ end
82
+ end
83
+ self.dominant_colors = colors.uniq
84
+ end
85
+
86
+ def black_and_white
87
+ [Pixelfy.new(0, 0, 0, 'x'), Pixelfy.new(0, 0, 100, 'circle')]
88
+ end
89
+
90
+ def build_pixel_array
91
+ get_pixels
92
+ colorize_pixels
93
+ end
94
+
95
+ def get_pixels
96
+ px = []
97
+
98
+ unless self.img.nil?
99
+ self.img.each_pixel do | pixel, col, row |
100
+ pixel = pixel.to_hsla
101
+ px << Pixelfy.new(pixel[0], pixel[1], pixel[2])
102
+ end
103
+ end
104
+ self.base_pixel_arr = px
105
+ end
106
+
107
+ def colorize_pixels
108
+ self.base_pixel_arr.each {|px| self.stitch_map << px.colorize(self.dominant_colors) }
109
+ end
110
+
111
+ def set_num_colors
112
+ num = self.num_of_colors - 2
113
+ case num
114
+ when 1
115
+ set_miro(1, 0)
116
+ when 2
117
+ set_miro(1, 1)
118
+ when 3
119
+ set_miro(2, 1)
120
+ when 4
121
+ set_miro(2, 2)
122
+ when 5
123
+ set_miro(3, 2)
124
+ when 6
125
+ set_miro(3, 3)
126
+ else
127
+ set_miro(num - 3, 3)
128
+ end
129
+ end
130
+
131
+ def set_miro(cc, off_c)
132
+ Miro.options[:color_count] = cc
133
+ self.num_of_off_colors = off_c
134
+ end
135
+
136
+ def build_off_color_arr(color)
137
+ palette = []
138
+ if !!color
139
+ c = Chroma::Color.new(color)
140
+ palette = c.palette
141
+ case self.num_of_off_colors
142
+ when 0
143
+ palette = []
144
+ when 1
145
+ palette = palette.complement.map{|x| Pixelfy.from_hex(x.to_s)}
146
+ when 2
147
+ palette = palette.triad.map{|x| Pixelfy.from_hex(x.to_s)}
148
+ when 3
149
+ palette = palette.tetrad.map{|x| Pixelfy.from_hex(x.to_s)}
150
+ end
151
+ end
152
+ palette
153
+ end
154
+
155
+ def view_miro_opts
156
+ Miro.options
157
+ end
158
+ end
@@ -0,0 +1,96 @@
1
+ class DrawRasem
2
+
3
+ attr_accessor :px_arr, :width, :px, :pos_x, :pos_y, :height
4
+
5
+ def initialize(px_arr, width=50, px=10)
6
+ self.px_arr = px_arr
7
+ self.width = width
8
+ self.px = px
9
+ clear_vars
10
+ end
11
+
12
+ def stitch
13
+ write(build_rasem_data, file='stitchify.svg')
14
+ clear_vars
15
+ end
16
+
17
+ def clear_vars
18
+ self.pos_x = self.px
19
+ self.pos_y = self.px
20
+ end
21
+
22
+ def write(rasem, file)
23
+ File.open(file, "w") do |f|
24
+ rasem.write(f)
25
+ end
26
+ end
27
+
28
+
29
+ def build_rasem_data
30
+ rasem_obj = self
31
+
32
+ Rasem::SVGImage.new(width: 1000000000, height: 100000000) do
33
+
34
+ for line_data in rasem_obj.grid
35
+ line line_data[0], line_data[1], line_data[2], line_data[3], :stroke_width=>line_data[5]
36
+ end
37
+
38
+ for pixel in rasem_obj.px_arr
39
+ pos_x = rasem_obj.pos_x
40
+ pos_y = rasem_obj.pos_y
41
+ px = rasem_obj.px
42
+
43
+ case pixel.shape
44
+ when 'rectangle'
45
+ rectangle pos_x, pos_y, px, px, fill: pixel.hex
46
+ when 'x'
47
+ line pos_x, pos_y, pos_x + px, pos_y + px
48
+ line pos_x, pos_y + px, pos_x + px, pos_y
49
+ when 'circle'
50
+ circle (pos_x + px/2), (pos_y + px/2), px / 2 - 1, fill: pixel.hex
51
+ when 'sm_rectangle'
52
+ rectangle pos_x + 1, pos_y + 1, px - 2, px - 2, fill: pixel.hex
53
+ when 'triangle'
54
+ polygon [pos_x + px/2, pos_y + 1], [pos_x + 1, pos_y + px - 1], [pos_x + px - 1, pos_y + px - 1], fill: pixel.hex
55
+ when 'diamond'
56
+ polygon [pos_x + px/2, pos_y + 1], [pos_x + 1, pos_y + px/2], [pos_x + px/2, pos_y + px - 1], [pos_x + px - 1, pos_y + px/2], fill: pixel.hex
57
+ when 'reverse_triangle'
58
+ polygon [pos_x + px/2, pos_y + px - 1], [pos_x + 1, pos_y + 1], [pos_x + px - 1, pos_y + 1], fill: pixel.hex
59
+ when 'left_triangle'
60
+ polygon [pos_x + 1, pos_y + px/2], [pos_x + px - 1, pos_y + 1], [pos_x + px - 1, pos_y + px - 1], fill: pixel.hex
61
+ when 'right_triangle'
62
+ polygon [pos_x + px - 1, pos_y + px/2], [pos_x + 1, pos_y + 1], [pos_x + 1, pos_y + px - 1], fill: pixel.hex
63
+ else
64
+ rectangle pos_x, pos_y, px, px, fill: pixel.hex
65
+ end
66
+
67
+ rasem_obj.update_positions
68
+ end
69
+ end
70
+ end
71
+
72
+ def grid
73
+ n = 10
74
+ output = []
75
+ (self.width + 1).times do |i|
76
+ x = 1
77
+ x = 2 if (i % 10 == 0)
78
+ output << [(i + 1) * self.px, self.px, (i + 1) * self.px, (self.width + 1) * self.px, 'black', x]
79
+ end
80
+ (self.width + 1).times do |i|
81
+ x = 1
82
+ x = 2 if i % 10 == 0
83
+ output << [self.px, (i + 1) * self.px, (self.width + 1) * self.px, (i + 1) * self.px, 'black', x]
84
+ end
85
+ output
86
+ end
87
+
88
+ def update_positions
89
+ if (self.pos_x / self.px) < self.width
90
+ self.pos_x = self.pos_x + self.px
91
+ else
92
+ self.pos_x = self.px
93
+ self.pos_y = self.pos_y + self.px
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,79 @@
1
+ class Pixelfy
2
+ require 'chroma'
3
+ include Chroma
4
+
5
+ attr_accessor :hue, :saturation, :lightness, :shape
6
+
7
+ HSL_OPEN_CONST = "hsl("
8
+
9
+ def initialize(hue, saturation, lightness, shape=nil)
10
+ self.hue = hue
11
+ self.saturation = saturation
12
+ self.lightness = lightness
13
+ self.shape = shape
14
+ end
15
+
16
+ def self.from_hex(hex_str)
17
+ px = ''
18
+ if hex_str
19
+ color_str = Chroma::Color.new(hex_str).to_hsl
20
+ color_str.slice!(HSL_OPEN_CONST)
21
+ color_str.slice!("%)")
22
+ color_str.slice!('%')
23
+ color_arr = color_str.split(', ')
24
+
25
+ px = self.new(color_arr[0].to_i, color_arr[1].to_i, color_arr[2].to_i)
26
+ end
27
+ px
28
+ end
29
+
30
+ def hex
31
+ Chroma::Color.new(hsl).to_hex
32
+ end
33
+
34
+ def hsl
35
+ "#{HSL_OPEN_CONST} #{self.hue}, #{self.saturation}%, #{self.lightness}%)"
36
+ end
37
+
38
+ def hsla
39
+ "#{HSL_OPEN_CONST} #{self.hue}, #{self.saturation}%, #{self.lightness}%, 1)"
40
+ end
41
+
42
+ def colorize(map)
43
+ deltae = 100000000000
44
+ closest_px = map[0]
45
+
46
+ map.each do |dom_px|
47
+ hue_delta = (dom_px.hue - self.hue).abs
48
+
49
+ if hue_delta < deltae
50
+
51
+ deltae = hue_delta
52
+ closest_px = dom_px
53
+
54
+ elsif hue_delta == deltae
55
+ dom_px_delta = self.get_full_delta(dom_px)
56
+ current_px_delta = self.get_full_delta(closest_px)
57
+ if dom_px_delta < current_px_delta
58
+ deltae = hue_delta
59
+ closest_px = dom_px
60
+ end
61
+ end
62
+ end
63
+
64
+ self.hue = closest_px.hue
65
+ self.saturation = closest_px.saturation
66
+ self.lightness = closest_px.lightness
67
+ self.shape = closest_px.shape
68
+
69
+ self
70
+ end
71
+
72
+ def get_full_delta(px)
73
+ hue_delta = (px.hue - self.hue).abs
74
+ sat_delta = (px.saturation - self.saturation).abs
75
+ lit_delta = (px.lightness - self.lightness).abs
76
+
77
+ hue_delta + sat_delta + lit_delta
78
+ end
79
+ end
metadata CHANGED
@@ -1,71 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stitchify
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ellen Wondra
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-05 00:00:00.000000000 Z
11
+ date: 2018-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: nokogiri
14
+ name: rasem
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 1.8.2
19
+ version: 0.7.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 1.8.2
26
+ version: 0.7.1
27
27
  - !ruby/object:Gem::Dependency
28
- name: rasem
28
+ name: miro
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 0.7.1
33
+ version: 0.4.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 0.7.1
40
+ version: 0.4.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: asciiart
42
+ name: color
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - '='
46
46
  - !ruby/object:Gem::Version
47
- version: 0.0.9
47
+ version: '1.8'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
- version: 0.0.9
54
+ version: '1.8'
55
55
  - !ruby/object:Gem::Dependency
56
- name: hex256
56
+ name: chroma
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: 0.0.1
61
+ version: '0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: 0.0.1
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rmagick
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rake
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -94,13 +108,16 @@ dependencies:
94
108
  - - ">="
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0'
97
- description: input an HTML document and output an SVG cross stitching pattern
111
+ description: ultimate goal is to input an HTML document and output an SVG cross stitching
112
+ pattern
98
113
  email: ellenfromillinois@gmail.com
99
114
  executables: []
100
115
  extensions: []
101
116
  extra_rdoc_files: []
102
117
  files:
103
118
  - lib/stitchify.rb
119
+ - lib/stitchify/draw_rasem.rb
120
+ - lib/stitchify/pixelfy.rb
104
121
  homepage: http://rubygems.org/gems/stitchify
105
122
  licenses:
106
123
  - MIT
@@ -124,5 +141,5 @@ rubyforge_project:
124
141
  rubygems_version: 2.6.14
125
142
  signing_key:
126
143
  specification_version: 4
127
- summary: converts an HTML document into a cross stitching pattern
144
+ summary: converts an image into a cross stitching pattern
128
145
  test_files: []