grobber 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/grobber.rb +8 -0
- data/lib/grobber/image.rb +85 -0
- data/lib/grobber/square_matrix.rb +97 -0
- metadata +66 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 0ff2b9a25b479d799168ccaaa55d1193aa740ad6
|
4
|
+
data.tar.gz: 07c5730e59c28186e1af920f7f12dc4ba869397d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5e86d8772c61d8f4679b011acb81e7169477320b6d563b1ae42fc6745647008a6c45e12c8c9e59b3818be798e94f190a25e5eb15fc28e4de78c96b20ddb741f7
|
7
|
+
data.tar.gz: fefe28b6d2db57e1b0fa2481724ccbc12374fbfecd56fea98d8056f10e22ef66f6cbfa7917f7634f6a9ebc17dda152c78bf30fc646f6b71344d579fd342ca69e
|
data/lib/grobber.rb
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
module Grobber
|
2
|
+
|
3
|
+
class Image
|
4
|
+
|
5
|
+
attr_reader :base_color, :second_color, :signature
|
6
|
+
|
7
|
+
def initialize string_base
|
8
|
+
@signature = Digest::SHA1.hexdigest string_base
|
9
|
+
end
|
10
|
+
|
11
|
+
def base_color
|
12
|
+
signature[9..14]
|
13
|
+
end
|
14
|
+
|
15
|
+
def second_color
|
16
|
+
signature[15..20]
|
17
|
+
end
|
18
|
+
|
19
|
+
def to_rmagick size_px = 480
|
20
|
+
new_base_image(size_px).tap do |magick|
|
21
|
+
block_width = size_px / 6
|
22
|
+
binary_matrix.each_with_coords do |b, x, y|
|
23
|
+
next if b.zero?
|
24
|
+
add_block magick, color_string(second_color), x, y, block_width
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def write path, size = 480
|
30
|
+
magick = to_rmagick size
|
31
|
+
magick.write(path) { self.quality = 95 }
|
32
|
+
magick.destroy!
|
33
|
+
path
|
34
|
+
end
|
35
|
+
|
36
|
+
def binary_matrix
|
37
|
+
@binary_matrix ||= SquareMatrix.new(binary_array).flip_flop
|
38
|
+
end
|
39
|
+
|
40
|
+
def color_matrix
|
41
|
+
@color_matrix ||= generate_hexa_array
|
42
|
+
end
|
43
|
+
|
44
|
+
def generate_hexa_array
|
45
|
+
binary_matrix.array.map do |b|
|
46
|
+
b.zero? ? base_color : second_color
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def binary_array
|
51
|
+
signature[0..8].split(//).map do |c|
|
52
|
+
2 * c.hex / 16
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
def color_string hex_value
|
59
|
+
"##{ hex_value }"
|
60
|
+
end
|
61
|
+
|
62
|
+
def add_block image, color, x, y, square_px
|
63
|
+
origin_point = [x, y].map{ |c| c * square_px }
|
64
|
+
end_point = [x, y].map{ |c| (c + 1) * square_px }
|
65
|
+
draw_rectangle image, color, origin_point, end_point
|
66
|
+
end
|
67
|
+
|
68
|
+
def draw_rectangle image, color, origin_point, end_point
|
69
|
+
p = Magick::Draw.new
|
70
|
+
p.fill = color
|
71
|
+
p.stroke_width(0)
|
72
|
+
p.rectangle(*origin_point, *end_point)
|
73
|
+
p.draw(image)
|
74
|
+
end
|
75
|
+
|
76
|
+
def new_base_image size_px
|
77
|
+
_base_color = color_string(base_color)
|
78
|
+
Magick::Image.new(size_px,size_px) do
|
79
|
+
self.background_color = _base_color
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
class SquareMatrix
|
2
|
+
|
3
|
+
attr_reader :array
|
4
|
+
|
5
|
+
def initialize _array
|
6
|
+
check_square(_array)
|
7
|
+
@array = _array
|
8
|
+
end
|
9
|
+
|
10
|
+
def each_with_coords
|
11
|
+
array.each_with_index do |e, i|
|
12
|
+
yield e, *coords_for(i)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def coords_for index
|
17
|
+
[x_coord(index), y_coord(index)]
|
18
|
+
end
|
19
|
+
|
20
|
+
def array_length
|
21
|
+
array.length
|
22
|
+
end
|
23
|
+
|
24
|
+
def length
|
25
|
+
length_for array
|
26
|
+
end
|
27
|
+
|
28
|
+
def x_coord index
|
29
|
+
index % length
|
30
|
+
end
|
31
|
+
|
32
|
+
def y_coord index
|
33
|
+
(index / length)
|
34
|
+
end
|
35
|
+
|
36
|
+
def index_for x, y
|
37
|
+
length * y + x
|
38
|
+
end
|
39
|
+
|
40
|
+
def flop_array
|
41
|
+
array_length.times.map do |i|
|
42
|
+
array[index_for(length - 1 - x_coord(i), y_coord(i))]
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def flop
|
47
|
+
self.class.new flop_array
|
48
|
+
end
|
49
|
+
|
50
|
+
def flip_flop
|
51
|
+
self.class.new flip_flop_array
|
52
|
+
end
|
53
|
+
|
54
|
+
def flip_flop_array
|
55
|
+
right_add_array(flop) + flip.right_add_array(flip.flop)
|
56
|
+
end
|
57
|
+
|
58
|
+
def flip_array
|
59
|
+
array_length.times.map do |i|
|
60
|
+
array[index_for x_coord(i), length - 1 - y_coord(i)]
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def flip
|
65
|
+
self.class.new flip_array
|
66
|
+
end
|
67
|
+
|
68
|
+
def right_add_array square_matrix
|
69
|
+
length.times.flat_map do |i|
|
70
|
+
line(i) + square_matrix.line(i)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def bottom_add square_matrix
|
75
|
+
end
|
76
|
+
|
77
|
+
def length_for array
|
78
|
+
(array.length ** 0.5).to_i
|
79
|
+
end
|
80
|
+
|
81
|
+
def check_square array
|
82
|
+
length = length_for array
|
83
|
+
raise "Non Square Matrix" unless array.length == length ** 2
|
84
|
+
end
|
85
|
+
|
86
|
+
def line i
|
87
|
+
s_index = length * i
|
88
|
+
array[s_index..s_index + length - 1]
|
89
|
+
end
|
90
|
+
|
91
|
+
def display
|
92
|
+
length.times do |i|
|
93
|
+
puts line(i).to_s
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
metadata
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: grobber
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Theo C
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-12-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rmagick
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.0'
|
20
|
+
- - '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 2.0.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '2.0'
|
30
|
+
- - '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 2.0.0
|
33
|
+
description: Generate a picture based on a string value
|
34
|
+
email: superkoinkoin@gmail.com
|
35
|
+
executables: []
|
36
|
+
extensions: []
|
37
|
+
extra_rdoc_files: []
|
38
|
+
files:
|
39
|
+
- lib/grobber.rb
|
40
|
+
- lib/grobber/image.rb
|
41
|
+
- lib/grobber/square_matrix.rb
|
42
|
+
homepage: http://rubygems.org/gems/grobber
|
43
|
+
licenses:
|
44
|
+
- MIT
|
45
|
+
metadata: {}
|
46
|
+
post_install_message:
|
47
|
+
rdoc_options: []
|
48
|
+
require_paths:
|
49
|
+
- lib
|
50
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - '>='
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
60
|
+
requirements: []
|
61
|
+
rubyforge_project:
|
62
|
+
rubygems_version: 2.2.2
|
63
|
+
signing_key:
|
64
|
+
specification_version: 4
|
65
|
+
summary: Grobber Generator
|
66
|
+
test_files: []
|