File: composite.rb

package info (click to toggle)
ruby-rmagick 6.0.1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 8,232 kB
  • sloc: cpp: 19,563; ruby: 17,147; sh: 88; javascript: 36; makefile: 13
file content (130 lines) | stat: -rw-r--r-- 4,911 bytes parent folder | download
1
2
3
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# Demonstrate the effects of various composite operators.
# Based on ImageMagick's composite test.

require 'rmagick'

ROWS = 70
COLS = 70
COLOR_A = '#999966'
COLOR_B = '#990066'

img = Magick::Image.new(COLS, ROWS)
triangle = Magick::Draw.new
triangle.fill(COLOR_A)
triangle.stroke('transparent')
triangle.polygon(0, 0, COLS, 0, 0, ROWS, 0, 0)
triangle.draw(img)
image_a = img.transparent('white', alpha: Magick::TransparentAlpha)
image_a['Label'] = 'A'

img = Magick::Image.new(COLS, ROWS)
triangle = Magick::Draw.new
triangle.fill(COLOR_B)
triangle.stroke('transparent')
triangle.polygon(0, 0, COLS, ROWS, COLS, 0, 0, 0)
triangle.draw(img)
image__b = img.transparent('white', alpha: Magick::TransparentAlpha)
image__b['Label'] = 'B'

list = Magick::ImageList.new
null = Magick::Image.read('xc:white') { |options| options.size = Magick::Geometry.new(COLS, ROWS) }
null = null.first.transparent('white', alpha: Magick::TransparentAlpha)
null.border_color = 'transparent'
granite = Magick::Image.read('granite:')

list << null.copy
list << image_a
list << image__b
list << null.copy

list << image__b.composite(image_a, Magick::CenterGravity, Magick::OverCompositeOp)
list.cur_image['Label'] = 'A over B'
list << image_a.composite(image__b, Magick::CenterGravity, Magick::OverCompositeOp)
list.cur_image['Label'] = 'B over A'

list << image__b.composite(image_a, Magick::CenterGravity, Magick::InCompositeOp)
list.cur_image['Label'] = 'A in B'
list << image_a.composite(image__b, Magick::CenterGravity, Magick::InCompositeOp)
list.cur_image['Label'] = 'B in A'

list << image__b.composite(image_a, Magick::CenterGravity, Magick::OutCompositeOp)
list.cur_image['Label'] = 'A out B'
list << image_a.composite(image__b, Magick::CenterGravity, Magick::OutCompositeOp)
list.cur_image['Label'] = 'B out A'

list << image__b.composite(image_a, Magick::CenterGravity, Magick::AtopCompositeOp)
list.cur_image['Label'] = 'A atop B'
list << image_a.composite(image__b, Magick::CenterGravity, Magick::AtopCompositeOp)
list.cur_image['Label'] = 'B atop A'

list << image__b.composite(image_a, Magick::CenterGravity, Magick::XorCompositeOp)
list.cur_image['Label'] = 'A xor B'

list << image__b.composite(image_a, Magick::CenterGravity, Magick::MultiplyCompositeOp)
list.cur_image['Label'] = 'A multiply B'

list << image__b.composite(image_a, Magick::CenterGravity, Magick::ScreenCompositeOp)
list.cur_image['Label'] = 'A screen B'

list << image__b.composite(image_a, Magick::CenterGravity, Magick::DarkenCompositeOp)
list.cur_image['Label'] = 'A darken B'

list << image__b.composite(image_a, Magick::CenterGravity, Magick::LightenCompositeOp)
list.cur_image['Label'] = 'A lighten B'

list << image__b.composite(image_a, Magick::CenterGravity, Magick::PlusCompositeOp)
list.cur_image['Label'] = 'A plus B'

list << image__b.composite(image_a, Magick::CenterGravity, Magick::MinusDstCompositeOp)
list.cur_image['Label'] = 'A minus B'

list << image__b.composite(image_a, Magick::CenterGravity, Magick::ModulusAddCompositeOp)
list.cur_image['Label'] = 'A add B'

list << image__b.composite(image_a, Magick::CenterGravity, Magick::ModulusSubtractCompositeOp)
list.cur_image['Label'] = 'A subtract B'

list << image__b.composite(image_a, Magick::CenterGravity, Magick::DifferenceCompositeOp)
list.cur_image['Label'] = 'A difference B'

list << image__b.composite(image_a, Magick::CenterGravity, Magick::HueCompositeOp)
list.cur_image['Label'] = 'A hue B'

list << image__b.composite(image_a, Magick::CenterGravity, Magick::SaturateCompositeOp)
list.cur_image['Label'] = 'A saturate B'

list << image__b.composite(image_a, Magick::CenterGravity, Magick::LuminizeCompositeOp)
list.cur_image['Label'] = 'A luminize B'

list << image__b.composite(image_a, Magick::CenterGravity, Magick::ColorizeCompositeOp)
list.cur_image['Label'] = 'A colorize B'

list << image__b.composite(image_a, Magick::CenterGravity, Magick::BumpmapCompositeOp)
list.cur_image['Label'] = 'A bumpmap B'

list << image__b.composite(image_a, Magick::CenterGravity, Magick::DissolveCompositeOp)
list.cur_image['Label'] = 'A dissolve B'

list << image__b.composite(image_a, Magick::CenterGravity, Magick::ThresholdCompositeOp)
list.cur_image['Label'] = 'A threshold B'

list << image__b.composite(image_a, Magick::CenterGravity, Magick::ModulateCompositeOp)
list.cur_image['Label'] = 'A modulate B'

list << image_a.composite(image__b, Magick::CenterGravity, Magick::ModulateCompositeOp)
list.cur_image['Label'] = 'B modulate A'

list << image__b.composite(image_a, Magick::CenterGravity, Magick::OverlayCompositeOp)
list.cur_image['Label'] = 'A overlay B'

montage = list.montage do |options|
  options.geometry = Magick::Geometry.new(COLS, ROWS, 3, 3)
  rows = (list.size + 3) / 4
  options.tile = Magick::Geometry.new(4, rows)
  options.texture = granite[0]
  options.fill = 'white'
  options.stroke = 'transparent'
end

montage.write('composite.gif')
exit