corbanbrook-rcomposite 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -1,6 +1,30 @@
1
1
 
2
2
  RComposite
3
3
 
4
+ RComposite is an RMagick abstraction library to easily manipulate and composite
5
+ images through the use of a canvas, layers, layer masks, adjustment layers, fill
6
+ layers, and layer sets (much like in Photoshop).
7
+
8
+
9
+ Install:
10
+
11
+ Add the github repository to your gem sources:
12
+
13
+ sudo gem sources -a http://gems.github.com
14
+
15
+ Install the gem from github:
16
+
17
+ sudo gem install corbanbrook-rcomposite
18
+
19
+ Require:
20
+
21
+ require 'rubygems'
22
+ require 'rcomposite'
23
+
24
+ include RComposite # optional: if you wish to have the RComposite module in your project scope
25
+
26
+ ...
27
+
4
28
 
5
29
  Class Summary:
6
30
 
@@ -34,92 +58,124 @@ Class Summary:
34
58
 
35
59
  Usage:
36
60
 
37
- First you must require the gem or lib:
61
+ * Creating a blank canvas:
38
62
 
39
- require 'rubygems'
40
- require 'rcomposite'
41
- include RComposite # includes the RComposite module methods into this scope
63
+ canvas = RComposite::Canvas.new(640, 480)
42
64
 
43
- After including the Module, we will need to create a blank canvas.
65
+ Canvas also accepts an optional block for easily adding layers to the stack
44
66
 
45
- canvas = Canvas.new(640, 480)
67
+ canvas = Rcomposite::Canvas.new(640, 480) do
68
+ layer :file => 'butterfly.png'
69
+ end
46
70
 
47
- Creating a layer:
71
+ * Creating a layer:
48
72
 
49
- photo = Layer.new :file => 'photo.jpg'
73
+ photo = RComposite::Layer.new :file => 'photo.jpg'
50
74
 
51
- Creating a fill layer:
75
+ * Creating a fill layer:
52
76
 
53
- blue = FillLayer.new '#000090'
77
+ blue = RCompisite::FillLayer.new '#000090'
54
78
 
55
- Changing a Layers properties:
79
+ * Changing a Layers properties:
56
80
 
57
- blue.opacity 40
58
- blue.mode Multiply
81
+ blue.opacity 40
82
+ blue.mode Multiply
59
83
 
60
- The layers may be added to the canvas. Whatever is added first will be on top:
84
+ * Adding layers to the canvas. (Whatever is added first will be on top):
61
85
 
62
- canvas.layer blue
63
- canvas.layer photo
86
+ canvas.layer blue
87
+ canvas.layer photo
64
88
 
65
- The canvas can be saved:
89
+ * Saving the canvas:
66
90
 
67
- canvas.save_as 'bluesky.jpg'
91
+ canvas.save_as 'bluesky.jpg'
68
92
 
69
- The real power of RComposite lies in its use of blocks and simplified syntax.
70
- Take a look at the following example:
93
+ * Adding an alpha channel mask to a layer:
71
94
 
72
- Canvas.new(320,240) do
95
+ Masks are used to punch holes into layers to add transparency.
73
96
 
74
- layer_set :slides do
75
- layer :file => 'slide1.png' do
76
- opacity 65
77
- offset 12, 12
78
- mode Lighten
79
- end
97
+ blue.layer_mask :file => 'alpha_channel.png'
80
98
 
81
- adjustment_layer Blur, 0.5, 1.5 do
82
- layer_mask :file => 'butterfly-mask.png'
83
- end
99
+ You can add layer options to the mask just like it was a normal layer.
84
100
 
85
- layer :file => 'slide2.png' do
86
- offset 28, 28
87
- opacity 30
88
- mode Darken
101
+ fill_layer SolidColor, '#f83898FF' do
102
+ layer_mask :file => 'butterfly-mask.png' do
103
+ offset -30, -30
104
+ rotate 40
89
105
  end
106
+ end
90
107
 
91
- rotate 45
92
- offset 70, 50
93
- scale 80, 80
108
+
109
+ The real power of RComposite lies in its use of blocks and simplified syntax.
110
+ Take a look at the following examples:
111
+
112
+ * Just like the Canvas, all layer types also accept an optional block parametre for setting layer options:
113
+
114
+ butterfly = RComposite::Layer :file => 'butterfly.png' do
115
+ offset 100, 100 # moves the layer on the canvas
116
+ rotate 25
94
117
  end
95
118
 
96
- fill_layer SolidColor, '#f83898FF' do
97
- opacity 70
98
- mode Multiply
119
+ or..
99
120
 
100
- layer_mask :file => 'butterfly-mask.png' do
101
- offset -30, -30
102
- image.rotate! 40
103
- end
121
+ canvas.layer :file => 'butterfly.png' do
122
+ ..
104
123
  end
105
124
 
106
- fill_layer Gradient, 0, 0, 0, 50, '#606', '#033' do
107
- opacity 90
108
- mode Overlay
125
+ * DSL Example
109
126
 
110
- layer_mask :file => 'butterfly-mask.png' do
111
- offset -20, -20
127
+ Canvas.new(320,240) do
128
+
129
+ layer_set :slides do
130
+ layer :file => 'slide1.png' do
131
+ opacity 65
132
+ offset 12, 12
133
+ mode Lighten
134
+ end
135
+
136
+ adjustment_layer Blur, 0.5, 1.5 do
137
+ layer_mask :file => 'butterfly-mask.png'
138
+ end
139
+
140
+ layer :file => 'slide2.png' do
141
+ offset 28, 28
142
+ opacity 30
143
+ mode Darken
144
+ end
145
+
146
+ rotate 45
147
+ offset 70, 50
148
+ scale 80, 80
112
149
  end
113
- end
114
150
 
115
- layer :file => 'background.png' do
116
- image.resize!(320, 240)
151
+ fill_layer SolidColor, '#f83898FF' do
152
+ opacity 70
153
+ mode Multiply
154
+
155
+ layer_mask :file => 'butterfly-mask.png' do
156
+ offset -30, -30
157
+ image.rotate! 40
158
+ end
159
+ end
160
+
161
+ fill_layer Gradient, 0, 0, 0, 50, '#606', '#033' do
162
+ opacity 90
163
+ mode Overlay
164
+
165
+ layer_mask :file => 'butterfly-mask.png' do
166
+ offset -20, -20
167
+ end
168
+ end
169
+
170
+ layer :file => 'background.png' do
171
+ image.resize!(320, 240)
172
+ end
173
+
174
+ save_as 'composite.jpg'
117
175
  end
118
176
 
119
- save_as 'composite.jpg'
120
- end
121
177
 
122
- This nice thing about RComposite is that it doesnt hide the underlaying RMagick
178
+ The nice thing about RComposite is that it doesnt hide the underlaying RMagick
123
179
  Image object from you. It is always available through the image accessor
124
180
 
125
181
  layer :file => 'photo.jpg' do
@@ -80,6 +80,10 @@ module RComposite
80
80
  @offset_y = y
81
81
  end
82
82
 
83
+ def rotate(degrees)
84
+ @image.rotate!(degrees)
85
+ end
86
+
83
87
  def opacity(percent)
84
88
  @opacity_percent = percent
85
89
  # intercept original alpha channel with pixel intensity
@@ -5,7 +5,6 @@ module RComposite
5
5
 
6
6
  def initialize(name, &block)
7
7
  @layers = []
8
- @layer_sets = {}
9
8
 
10
9
  bounding_box
11
10
  @name = name
@@ -13,23 +12,25 @@ module RComposite
13
12
  self.instance_eval &block if block_given?
14
13
  end
15
14
 
16
- def layer_set(set_or_name, &block)
17
- if set_or_name.is_a? RComposite::LayerSet
18
- # referencing a previously instanstiated LayerSet and adding to Canvas.
19
- set = set_or_name
20
- @layers << set
21
- @layer_sets[set.name] = set
22
-
23
- elsif @layer_sets[set_or_name]
24
- # referencing a previously added LayerSet.
25
- set = @layer_sets[set_or_name]
26
-
15
+ def stack(&block)
16
+ self.instance_eval &block if block_given?
17
+ end
18
+
19
+ def layer_set(ref, position = :bottom, &block)
20
+ if ref.is_a? RComposite::LayerSet
21
+ # referencing a previously instanstiated LayerSet.
22
+ set = ref
27
23
  else
28
- # creating a new LayerSet and adding to Canvas.
29
- set = LayerSet.new set_or_name
30
- @layers << set
31
- @layer_sets[set_or_name] = set
24
+ # creating a new LayerSet
25
+ set = LayerSet.new ref
32
26
  end
27
+
28
+ # Add layer set to render pipeline
29
+ if position == :bottom
30
+ @layers << set
31
+ elsif position == :top
32
+ @layers.unshift set
33
+ end
33
34
 
34
35
  # tie floating block methods (layer, rotate, offset, etc) to LayerSet object.
35
36
  set.instance_eval &block if block_given?
@@ -43,6 +44,8 @@ module RComposite
43
44
  else
44
45
  layer = Layer.new options
45
46
  end
47
+
48
+ # Add layer to render pipeline
46
49
  @layers << layer
47
50
 
48
51
  # tie floating block methods (opacity, mode, offset, etc) to Layer object.
@@ -76,7 +79,6 @@ module RComposite
76
79
 
77
80
  # clear layers and sets
78
81
  @layers.clear
79
- @layer_sets.clear
80
82
 
81
83
  # only 1 flattened layer now
82
84
  @layers << Layer.new(flattened_image)
@@ -114,7 +116,7 @@ module RComposite
114
116
  @layers.delete(layer)
115
117
  bounding_box
116
118
  end
117
-
119
+
118
120
  def bounding_box
119
121
  if @layers.size > 0
120
122
  x1 = []
@@ -181,7 +183,7 @@ module RComposite
181
183
  new_mid_x = ((layer_mid_x * cos) - (layer_mid_y * sin)).round
182
184
  new_mid_y = ((layer_mid_x * sin) + (layer_mid_y * cos)).round
183
185
 
184
- layer.image.rotate!(degrees)
186
+ layer.rotate(degrees)
185
187
 
186
188
  new_offset_x = new_mid_x - (layer.width/2.0).round + @min_x + bounding_mid_x
187
189
  new_offset_y = new_mid_y * -1 - (layer.height/2.0).round + @min_y + bounding_mid_y
data/lib/rcomposite.rb CHANGED
@@ -6,3 +6,4 @@ require 'rcomposite/canvas'
6
6
  require 'rcomposite/filllayer'
7
7
  require 'rcomposite/adjustmentlayer'
8
8
  require 'rcomposite/layermask'
9
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: corbanbrook-rcomposite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Corban Brook
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-07-24 00:00:00 -07:00
12
+ date: 2009-08-13 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -43,6 +43,7 @@ files:
43
43
  - lib/rcomposite/layermask.rb
44
44
  has_rdoc: true
45
45
  homepage: http://github.com/corbanbrook/rcomposite
46
+ licenses:
46
47
  post_install_message:
47
48
  rdoc_options: []
48
49
 
@@ -63,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
63
64
  requirements: []
64
65
 
65
66
  rubyforge_project:
66
- rubygems_version: 1.2.0
67
+ rubygems_version: 1.3.5
67
68
  signing_key:
68
69
  specification_version: 2
69
70
  summary: An RMagick abstration layer for easy image compositing