rmagick 2.16.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of rmagick might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/.appveyor.yml +19 -0
- data/.circleci/config.yml +56 -0
- data/.rubocop.yml +8 -335
- data/.rubocop_todo.yml +255 -0
- data/.ruby-version +1 -0
- data/.travis.yml +6 -49
- data/CHANGELOG.md +23 -0
- data/CONTRIBUTING.md +34 -0
- data/Gemfile +0 -6
- data/README.textile +11 -3
- data/Rakefile +23 -15
- data/before_install_linux.sh +12 -15
- data/doc/ex/InitialCoords.rb +4 -4
- data/doc/ex/NewCoordSys.rb +4 -4
- data/doc/ex/OrigCoordSys.rb +2 -2
- data/doc/ex/PreserveAspectRatio.rb +34 -34
- data/doc/ex/RotateScale.rb +7 -7
- data/doc/ex/Skew.rb +7 -7
- data/doc/ex/Use01.rb +1 -1
- data/doc/ex/Use02.rb +4 -4
- data/doc/ex/Use03.rb +2 -2
- data/doc/ex/ViewBox.rb +4 -4
- data/doc/ex/affine.rb +5 -5
- data/doc/ex/affine_transform.rb +3 -3
- data/doc/ex/arc.rb +9 -9
- data/doc/ex/arcpath.rb +2 -2
- data/doc/ex/arcs01.rb +6 -6
- data/doc/ex/arcs02.rb +8 -8
- data/doc/ex/axes.rb +11 -11
- data/doc/ex/baseline_shift01.rb +5 -5
- data/doc/ex/bilevel_channel.rb +1 -1
- data/doc/ex/blur_image.rb +1 -1
- data/doc/ex/border.rb +1 -1
- data/doc/ex/bounding_box.rb +11 -11
- data/doc/ex/cbezier1.rb +12 -12
- data/doc/ex/cbezier2.rb +13 -13
- data/doc/ex/cbezier3.rb +13 -13
- data/doc/ex/cbezier4.rb +13 -13
- data/doc/ex/cbezier5.rb +13 -13
- data/doc/ex/cbezier6.rb +19 -19
- data/doc/ex/channel.rb +2 -2
- data/doc/ex/chop.rb +2 -2
- data/doc/ex/circle.rb +7 -7
- data/doc/ex/circle01.rb +2 -2
- data/doc/ex/clip_path.rb +6 -6
- data/doc/ex/coalesce.rb +6 -6
- data/doc/ex/color_fill_to_border.rb +8 -8
- data/doc/ex/color_floodfill.rb +8 -8
- data/doc/ex/color_histogram.rb +2 -2
- data/doc/ex/color_reset.rb +2 -2
- data/doc/ex/colors.rb +4 -4
- data/doc/ex/compose_mask.rb +2 -2
- data/doc/ex/composite.rb +39 -39
- data/doc/ex/composite_layers.rb +1 -2
- data/doc/ex/contrast.rb +3 -3
- data/doc/ex/crop.rb +2 -2
- data/doc/ex/crop_with_gravity.rb +5 -5
- data/doc/ex/cubic01.rb +12 -12
- data/doc/ex/cubic02.rb +22 -22
- data/doc/ex/cycle_colormap.rb +3 -3
- data/doc/ex/dissolve.rb +0 -0
- data/doc/ex/drawcomp.rb +8 -9
- data/doc/ex/drop_shadow.rb +4 -4
- data/doc/ex/ellipse.rb +9 -9
- data/doc/ex/ellipse01.rb +3 -3
- data/doc/ex/enhance.rb +2 -2
- data/doc/ex/evenodd.rb +19 -19
- data/doc/ex/fill_pattern.rb +3 -3
- data/doc/ex/flatten_images.rb +1 -1
- data/doc/ex/font_styles.rb +13 -13
- data/doc/ex/fonts.rb +2 -6
- data/doc/ex/frame.rb +1 -1
- data/doc/ex/get_multiline_type_metrics.rb +3 -3
- data/doc/ex/get_pixels.rb +4 -6
- data/doc/ex/get_type_metrics.rb +26 -25
- data/doc/ex/gradientfill.rb +2 -2
- data/doc/ex/grav.rb +12 -12
- data/doc/ex/gravity.rb +14 -16
- data/doc/ex/group.rb +11 -11
- data/doc/ex/hatchfill.rb +2 -2
- data/doc/ex/image.rb +9 -9
- data/doc/ex/implode.rb +2 -2
- data/doc/ex/line.rb +10 -10
- data/doc/ex/line01.rb +7 -7
- data/doc/ex/mask.rb +0 -0
- data/doc/ex/matte_fill_to_border.rb +3 -3
- data/doc/ex/matte_floodfill.rb +2 -2
- data/doc/ex/matte_replace.rb +3 -3
- data/doc/ex/median_filter.rb +2 -2
- data/doc/ex/mono.rb +2 -2
- data/doc/ex/morph.rb +1 -1
- data/doc/ex/mosaic.rb +7 -5
- data/doc/ex/motion_blur.rb +1 -1
- data/doc/ex/negate_channel.rb +0 -0
- data/doc/ex/nested_rvg.rb +2 -2
- data/doc/ex/nonzero.rb +19 -19
- data/doc/ex/opacity.rb +9 -9
- data/doc/ex/path.rb +17 -17
- data/doc/ex/pattern1.rb +4 -4
- data/doc/ex/pattern2.rb +2 -2
- data/doc/ex/polaroid.rb +0 -1
- data/doc/ex/polygon.rb +7 -7
- data/doc/ex/polygon01.rb +7 -7
- data/doc/ex/polyline.rb +7 -7
- data/doc/ex/polyline01.rb +8 -8
- data/doc/ex/posterize.rb +0 -0
- data/doc/ex/qbezierpath.rb +16 -16
- data/doc/ex/quad01.rb +6 -6
- data/doc/ex/quantize-m.rb +2 -2
- data/doc/ex/random_threshold_channel.rb +1 -1
- data/doc/ex/rect01.rb +2 -2
- data/doc/ex/rect02.rb +3 -3
- data/doc/ex/rectangle.rb +6 -6
- data/doc/ex/reduce_noise.rb +2 -2
- data/doc/ex/remap.rb +0 -0
- data/doc/ex/resize_to_fill.rb +0 -0
- data/doc/ex/resize_to_fit.rb +0 -0
- data/doc/ex/roll.rb +1 -1
- data/doc/ex/rotate.rb +8 -8
- data/doc/ex/rotate_f.rb +1 -1
- data/doc/ex/roundrect.rb +6 -6
- data/doc/ex/rubyname.rb +4 -4
- data/doc/ex/rvg_clippath.rb +3 -3
- data/doc/ex/rvg_linecap.rb +7 -7
- data/doc/ex/rvg_linejoin.rb +7 -7
- data/doc/ex/rvg_opacity.rb +5 -5
- data/doc/ex/rvg_pattern.rb +8 -8
- data/doc/ex/rvg_stroke_dasharray.rb +2 -2
- data/doc/ex/sepiatone.rb +0 -0
- data/doc/ex/shadow.rb +6 -6
- data/doc/ex/shear.rb +2 -2
- data/doc/ex/skewx.rb +8 -8
- data/doc/ex/skewy.rb +9 -9
- data/doc/ex/smile.rb +5 -4
- data/doc/ex/sparse_color.rb +0 -4
- data/doc/ex/splice.rb +1 -1
- data/doc/ex/stegano.rb +4 -5
- data/doc/ex/stroke_dasharray.rb +10 -10
- data/doc/ex/stroke_fill.rb +2 -2
- data/doc/ex/stroke_linecap.rb +12 -12
- data/doc/ex/stroke_linejoin.rb +12 -12
- data/doc/ex/stroke_width.rb +11 -11
- data/doc/ex/swirl.rb +2 -2
- data/doc/ex/text.rb +6 -6
- data/doc/ex/text01.rb +4 -4
- data/doc/ex/text_align.rb +5 -5
- data/doc/ex/text_antialias.rb +2 -2
- data/doc/ex/text_styles.rb +8 -8
- data/doc/ex/text_undercolor.rb +4 -4
- data/doc/ex/texture_fill_to_border.rb +8 -8
- data/doc/ex/texture_floodfill.rb +8 -8
- data/doc/ex/texturefill.rb +2 -2
- data/doc/ex/threshold.rb +2 -2
- data/doc/ex/to_blob.rb +1 -1
- data/doc/ex/translate.rb +8 -8
- data/doc/ex/transparent.rb +6 -6
- data/doc/ex/transpose.rb +0 -0
- data/doc/ex/transverse.rb +0 -0
- data/doc/ex/tref01.rb +6 -6
- data/doc/ex/triangle01.rb +2 -2
- data/doc/ex/trim.rb +2 -2
- data/doc/ex/tspan01.rb +5 -5
- data/doc/ex/tspan02.rb +5 -5
- data/doc/ex/tspan03.rb +5 -5
- data/doc/ex/unsharp_mask.rb +3 -3
- data/doc/ex/viewex.rb +5 -5
- data/doc/ex/vignette.rb +0 -0
- data/doc/ex/watermark.rb +6 -6
- data/doc/ex/wet_floor.rb +2 -2
- data/doc/ex/writing_mode01.rb +12 -12
- data/doc/ex/writing_mode02.rb +12 -12
- data/examples/constitute.rb +1 -1
- data/examples/crop_with_gravity.rb +5 -5
- data/examples/demo.rb +6 -7
- data/examples/describe.rb +8 -10
- data/examples/find_similar_region.rb +3 -3
- data/examples/histogram.rb +192 -201
- data/examples/identify.rb +62 -73
- data/examples/image_opacity.rb +0 -1
- data/examples/import_export.rb +1 -1
- data/examples/pattern_fill.rb +3 -4
- data/examples/rotating_text.rb +5 -4
- data/examples/spinner.rb +5 -5
- data/examples/thumbnail.rb +3 -3
- data/examples/vignette.rb +5 -5
- data/ext/RMagick/extconf.rb +213 -230
- data/ext/RMagick/rmagick.c +1 -0
- data/ext/RMagick/rmagick.h +26 -29
- data/ext/RMagick/rmdraw.c +3 -38
- data/ext/RMagick/rmenum.c +36 -0
- data/ext/RMagick/rmimage.c +166 -10
- data/ext/RMagick/rminfo.c +7 -2
- data/ext/RMagick/rmkinfo.c +247 -0
- data/ext/RMagick/rmmain.c +96 -0
- data/ext/RMagick/rmutil.c +4 -0
- data/lib/rmagick/version.rb +3 -3
- data/lib/rmagick_internal.rb +226 -308
- data/lib/rvg/clippath.rb +2 -4
- data/lib/rvg/container.rb +25 -22
- data/lib/rvg/deep_equal.rb +11 -11
- data/lib/rvg/describable.rb +2 -2
- data/lib/rvg/embellishable.rb +60 -66
- data/lib/rvg/misc.rb +122 -128
- data/lib/rvg/pathdata.rb +15 -17
- data/lib/rvg/rvg.rb +41 -44
- data/lib/rvg/stretchable.rb +22 -28
- data/lib/rvg/stylable.rb +10 -10
- data/lib/rvg/text.rb +164 -165
- data/lib/rvg/transformable.rb +15 -15
- data/lib/rvg/units.rb +2 -2
- data/rmagick.gemspec +9 -33
- data/spec/rmagick/draw_spec.rb +5 -6
- data/spec/rmagick/image/blue_shift_spec.rb +1 -3
- data/spec/rmagick/image/channel_entropy_spec.rb +9 -0
- data/spec/rmagick/image/composite_spec.rb +2 -4
- data/spec/rmagick/image/constitute_spec.rb +2 -4
- data/spec/rmagick/image/dispatch_spec.rb +1 -3
- data/spec/rmagick/image/from_blob_spec.rb +1 -3
- data/spec/rmagick/image/ping_spec.rb +1 -3
- data/spec/rmagick/image/properties_spec.rb +0 -2
- data/spec/rmagick/image/read_spec.rb +28 -0
- data/spec/spec_helper.rb +7 -1
- data/spec/support/issue_200/app.rb +8 -0
- data/test/Image1.rb +70 -70
- data/test/Image2.rb +369 -361
- data/test/Image3.rb +64 -63
- data/test/ImageList1.rb +796 -792
- data/test/ImageList2.rb +43 -44
- data/test/Image_attributes.rb +26 -48
- data/test/Import_Export.rb +71 -77
- data/test/Info.rb +30 -31
- data/test/Magick.rb +47 -46
- data/test/Pixel.rb +24 -24
- data/test/Preview.rb +7 -6
- data/test/test_all_basic.rb +15 -7
- data/test/tmpnam_test.rb +3 -3
- metadata +57 -18
data/doc/ex/coalesce.rb
CHANGED
@@ -16,15 +16,15 @@ end
|
|
16
16
|
|
17
17
|
# Create a image that will hold the alphabet images in 5 rows and 5 columns.
|
18
18
|
cells = Magick::ImageList.new
|
19
|
-
cells.new_image buttons.columns*5, buttons.rows*5 do
|
19
|
+
cells.new_image buttons.columns * 5, buttons.rows * 5 do
|
20
20
|
self.background_color = '#000000ff' # transparent
|
21
21
|
end
|
22
22
|
cells.matte = true
|
23
23
|
|
24
|
-
offset = Magick::Rectangle.new(0,0,0,0)
|
24
|
+
offset = Magick::Rectangle.new(0, 0, 0, 0)
|
25
25
|
|
26
26
|
# Create 2 arrays from which we can randomly choose row,col pairs
|
27
|
-
row = [0]*5 + [1]*5 + [2]*5 + [3]*5 + [4]*5
|
27
|
+
row = [0] * 5 + [1] * 5 + [2] * 5 + [3] * 5 + [4] * 5
|
28
28
|
col = (0..4).to_a * 5
|
29
29
|
|
30
30
|
# The coalesce method composites the 2nd image over the 1st, the 3rd image
|
@@ -41,8 +41,8 @@ srand 1234
|
|
41
41
|
y = col.delete_at n
|
42
42
|
|
43
43
|
button = buttons[i]
|
44
|
-
offset.x = x*button.columns
|
45
|
-
offset.y = y*button.rows
|
44
|
+
offset.x = x * button.columns
|
45
|
+
offset.y = y * button.rows
|
46
46
|
button.page = offset
|
47
47
|
button.matte = true
|
48
48
|
cells << button
|
@@ -50,7 +50,7 @@ end
|
|
50
50
|
|
51
51
|
puts 'This may take a few seconds...'
|
52
52
|
cells.delay = 10
|
53
|
-
cells.iterations =
|
53
|
+
cells.iterations = 10_000
|
54
54
|
res = cells.coalesce
|
55
55
|
res.write 'coalesce_anim.gif'
|
56
56
|
res[25].write 'coalesce.gif'
|
@@ -3,27 +3,27 @@ require 'rmagick'
|
|
3
3
|
|
4
4
|
# Demonstrate the Image#color_fill_to_border method
|
5
5
|
|
6
|
-
before = Magick::Image.new(200,200) do
|
6
|
+
before = Magick::Image.new(200, 200) do
|
7
7
|
self.background_color = 'white'
|
8
8
|
self.border_color = 'black'
|
9
9
|
end
|
10
|
-
before.border!(1,1,'black')
|
10
|
+
before.border!(1, 1, 'black')
|
11
11
|
|
12
12
|
circle = Magick::Draw.new
|
13
13
|
circle.fill('transparent')
|
14
14
|
circle.stroke('black')
|
15
15
|
circle.stroke_width(2)
|
16
|
-
circle.circle(100,100,180,100)
|
16
|
+
circle.circle(100, 100, 180, 100)
|
17
17
|
circle.fill('plum1')
|
18
18
|
circle.stroke('transparent')
|
19
|
-
circle.circle(
|
20
|
-
circle.circle(140,100,120,100)
|
21
|
-
circle.circle(100, 60,100, 40)
|
22
|
-
circle.circle(100,140,100,120)
|
19
|
+
circle.circle(60, 100, 40, 100)
|
20
|
+
circle.circle(140, 100, 120, 100)
|
21
|
+
circle.circle(100, 60, 100, 40)
|
22
|
+
circle.circle(100, 140, 100, 120)
|
23
23
|
circle.draw(before)
|
24
24
|
|
25
25
|
before.write('color_fill_to_border_before.gif')
|
26
26
|
|
27
|
-
after = before.color_fill_to_border(100,100, 'aquamarine')
|
27
|
+
after = before.color_fill_to_border(100, 100, 'aquamarine')
|
28
28
|
after.write('color_fill_to_border_after.gif')
|
29
29
|
exit
|
data/doc/ex/color_floodfill.rb
CHANGED
@@ -3,26 +3,26 @@ require 'rmagick'
|
|
3
3
|
|
4
4
|
# Demonstrate the Image#color_floodfill method
|
5
5
|
|
6
|
-
before = Magick::Image.new(200,200) { self.background_color = 'white' }
|
7
|
-
before.border!(1,1,'black')
|
6
|
+
before = Magick::Image.new(200, 200) { self.background_color = 'white' }
|
7
|
+
before.border!(1, 1, 'black')
|
8
8
|
|
9
9
|
circle = Magick::Draw.new
|
10
10
|
circle.fill('transparent')
|
11
11
|
circle.stroke_width(2)
|
12
12
|
circle.stroke('black')
|
13
|
-
circle.circle(100,100,180,100)
|
13
|
+
circle.circle(100, 100, 180, 100)
|
14
14
|
circle.fill('plum1')
|
15
15
|
circle.stroke('transparent')
|
16
|
-
circle.circle(
|
17
|
-
circle.circle(140,100,120,100)
|
18
|
-
circle.circle(100, 60,100, 40)
|
19
|
-
circle.circle(100,140,100,120)
|
16
|
+
circle.circle(60, 100, 40, 100)
|
17
|
+
circle.circle(140, 100, 120, 100)
|
18
|
+
circle.circle(100, 60, 100, 40)
|
19
|
+
circle.circle(100, 140, 100, 120)
|
20
20
|
circle.draw(before)
|
21
21
|
|
22
22
|
before.write('color_floodfill_before.gif')
|
23
23
|
|
24
24
|
aquamarine = Magick::Pixel.from_color('aquamarine')
|
25
|
-
after = before.color_floodfill(100,100, aquamarine)
|
25
|
+
after = before.color_floodfill(100, 100, aquamarine)
|
26
26
|
|
27
27
|
after.write('color_floodfill_after.gif')
|
28
28
|
exit
|
data/doc/ex/color_histogram.rb
CHANGED
@@ -11,9 +11,9 @@ img = img.quantize(NUM_COLORS)
|
|
11
11
|
hist = img.color_histogram
|
12
12
|
|
13
13
|
# sort pixels by increasing count
|
14
|
-
pixels = hist.keys.sort_by {|pixel| hist[pixel] }
|
14
|
+
pixels = hist.keys.sort_by { |pixel| hist[pixel] }
|
15
15
|
|
16
|
-
scale = HIST_HEIGHT / (hist.values.max*1.025)
|
16
|
+
scale = HIST_HEIGHT / (hist.values.max * 1.025) # put 2.5% air at the top
|
17
17
|
|
18
18
|
gc = Magick::Draw.new
|
19
19
|
gc.stroke_width(1)
|
data/doc/ex/color_reset.rb
CHANGED
@@ -3,9 +3,9 @@ require 'rmagick'
|
|
3
3
|
|
4
4
|
# Demonstrate the Image#color_reset! method
|
5
5
|
|
6
|
-
f = Magick::Image.new(100,100) { self.background_color = 'white' }
|
6
|
+
f = Magick::Image.new(100, 100) { self.background_color = 'white' }
|
7
7
|
red = Magick::Pixel.from_color('red')
|
8
8
|
f.color_reset!(red)
|
9
|
-
#f.display
|
9
|
+
# f.display
|
10
10
|
f.write('color_reset.gif')
|
11
11
|
exit
|
data/doc/ex/colors.rb
CHANGED
@@ -20,8 +20,8 @@ colors do |c|
|
|
20
20
|
self.background_color = c.color
|
21
21
|
self.border_color = 'gray50'
|
22
22
|
end
|
23
|
-
rgb =
|
24
|
-
rgb +=
|
23
|
+
rgb = format('#%02x%02x%02x', c.color.red & 0xff, c.color.green & 0xff, c.color.blue & 0xff)
|
24
|
+
rgb += format('%02x', c.color.opacity & 0xff) if c.color.opacity != 0
|
25
25
|
m = /(.*?)Compliance/.match c.compliance.to_s
|
26
26
|
colors.cur_image['Label'] = "#{c.name} (#{rgb}) #{m[1]}"
|
27
27
|
end
|
@@ -44,7 +44,7 @@ end
|
|
44
44
|
# Add the title at the top, over the 'null:'
|
45
45
|
# tiles we added at the very beginning.
|
46
46
|
title = Draw.new
|
47
|
-
title.annotate(montage, 0,0,0,20, 'Named Colors') do
|
47
|
+
title.annotate(montage, 0, 0, 0, 20, 'Named Colors') do
|
48
48
|
self.fill = 'white'
|
49
49
|
self.stroke = 'transparent'
|
50
50
|
self.pointsize = 32
|
@@ -58,7 +58,7 @@ montage.write('colors.miff')
|
|
58
58
|
|
59
59
|
# Make a small sample of the full montage to display in the HTML file.
|
60
60
|
sample = montage[8].crop(55, 325, 495, 110)
|
61
|
-
sample.page = Rectangle.new(495,110)
|
61
|
+
sample.page = Rectangle.new(495, 110)
|
62
62
|
sample.write('colors.gif')
|
63
63
|
|
64
64
|
exit
|
data/doc/ex/compose_mask.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'rmagick'
|
2
2
|
|
3
3
|
background = Magick::Image.read('images/Flower_Hat.jpg').first
|
4
|
-
source = Magick::Image.read('pattern:checkerboard') {self.size = "#{background.columns}x#{background.rows}"}.first
|
5
|
-
mask = Magick::Image.new(background.columns, background.rows) {self.background_color = 'black'}
|
4
|
+
source = Magick::Image.read('pattern:checkerboard') { self.size = "#{background.columns}x#{background.rows}" }.first
|
5
|
+
mask = Magick::Image.new(background.columns, background.rows) { self.background_color = 'black' }
|
6
6
|
|
7
7
|
# Make a mask
|
8
8
|
gc = Magick::Draw.new
|
data/doc/ex/composite.rb
CHANGED
@@ -15,114 +15,114 @@ img = Image.new(COLS, ROWS)
|
|
15
15
|
triangle = Draw.new
|
16
16
|
triangle.fill(COLOR_A)
|
17
17
|
triangle.stroke('transparent')
|
18
|
-
triangle.polygon(0,0, COLS,0, 0,ROWS, 0,0)
|
18
|
+
triangle.polygon(0, 0, COLS, 0, 0, ROWS, 0, 0)
|
19
19
|
triangle.draw(img)
|
20
|
-
|
21
|
-
|
20
|
+
image_a = img.transparent('white', TransparentOpacity)
|
21
|
+
image_a['Label'] = 'A'
|
22
22
|
|
23
23
|
img = Image.new(COLS, ROWS)
|
24
24
|
triangle = Draw.new
|
25
25
|
triangle.fill(COLOR_B)
|
26
26
|
triangle.stroke('transparent')
|
27
|
-
triangle.polygon(0,0, COLS,ROWS, COLS,0, 0,0)
|
27
|
+
triangle.polygon(0, 0, COLS, ROWS, COLS, 0, 0, 0)
|
28
28
|
triangle.draw(img)
|
29
|
-
|
30
|
-
|
29
|
+
image__b = img.transparent('white', TransparentOpacity)
|
30
|
+
image__b['Label'] = 'B'
|
31
31
|
|
32
32
|
list = ImageList.new
|
33
|
-
null = Image.read('xc:white') { self.size = Geometry.new(COLS,ROWS) }
|
33
|
+
null = Image.read('xc:white') { self.size = Geometry.new(COLS, ROWS) }
|
34
34
|
null = null.first.transparent('white', TransparentOpacity)
|
35
35
|
null.border_color = 'transparent'
|
36
|
-
granite =
|
36
|
+
granite = Image.read('granite:')
|
37
37
|
|
38
38
|
list << null.copy
|
39
|
-
list <<
|
40
|
-
list <<
|
39
|
+
list << image_a
|
40
|
+
list << image__b
|
41
41
|
list << null.copy
|
42
42
|
|
43
|
-
list <<
|
43
|
+
list << image__b.composite(image_a, CenterGravity, OverCompositeOp)
|
44
44
|
list.cur_image['Label'] = 'A over B'
|
45
|
-
list <<
|
45
|
+
list << image_a.composite(image__b, CenterGravity, OverCompositeOp)
|
46
46
|
list.cur_image['Label'] = 'B over A'
|
47
47
|
|
48
|
-
list <<
|
48
|
+
list << image__b.composite(image_a, CenterGravity, InCompositeOp)
|
49
49
|
list.cur_image['Label'] = 'A in B'
|
50
|
-
list <<
|
50
|
+
list << image_a.composite(image__b, CenterGravity, InCompositeOp)
|
51
51
|
list.cur_image['Label'] = 'B in A'
|
52
52
|
|
53
|
-
list <<
|
53
|
+
list << image__b.composite(image_a, CenterGravity, OutCompositeOp)
|
54
54
|
list.cur_image['Label'] = 'A out B'
|
55
|
-
list <<
|
55
|
+
list << image_a.composite(image__b, CenterGravity, OutCompositeOp)
|
56
56
|
list.cur_image['Label'] = 'B out A'
|
57
57
|
|
58
|
-
list <<
|
58
|
+
list << image__b.composite(image_a, CenterGravity, AtopCompositeOp)
|
59
59
|
list.cur_image['Label'] = 'A atop B'
|
60
|
-
list <<
|
60
|
+
list << image_a.composite(image__b, CenterGravity, AtopCompositeOp)
|
61
61
|
list.cur_image['Label'] = 'B atop A'
|
62
62
|
|
63
|
-
list <<
|
63
|
+
list << image__b.composite(image_a, CenterGravity, XorCompositeOp)
|
64
64
|
list.cur_image['Label'] = 'A xor B'
|
65
65
|
|
66
|
-
list <<
|
66
|
+
list << image__b.composite(image_a, CenterGravity, MultiplyCompositeOp)
|
67
67
|
list.cur_image['Label'] = 'A multiply B'
|
68
68
|
|
69
|
-
list <<
|
69
|
+
list << image__b.composite(image_a, CenterGravity, ScreenCompositeOp)
|
70
70
|
list.cur_image['Label'] = 'A screen B'
|
71
71
|
|
72
|
-
list <<
|
72
|
+
list << image__b.composite(image_a, CenterGravity, DarkenCompositeOp)
|
73
73
|
list.cur_image['Label'] = 'A darken B'
|
74
74
|
|
75
|
-
list <<
|
75
|
+
list << image__b.composite(image_a, CenterGravity, LightenCompositeOp)
|
76
76
|
list.cur_image['Label'] = 'A lighten B'
|
77
77
|
|
78
|
-
list <<
|
78
|
+
list << image__b.composite(image_a, CenterGravity, PlusCompositeOp)
|
79
79
|
list.cur_image['Label'] = 'A plus B'
|
80
80
|
|
81
|
-
list <<
|
81
|
+
list << image__b.composite(image_a, CenterGravity, MinusCompositeOp)
|
82
82
|
list.cur_image['Label'] = 'A minus B'
|
83
83
|
|
84
|
-
list <<
|
84
|
+
list << image__b.composite(image_a, CenterGravity, AddCompositeOp)
|
85
85
|
list.cur_image['Label'] = 'A add B'
|
86
86
|
|
87
|
-
list <<
|
87
|
+
list << image__b.composite(image_a, CenterGravity, SubtractCompositeOp)
|
88
88
|
list.cur_image['Label'] = 'A subtract B'
|
89
89
|
|
90
|
-
list <<
|
90
|
+
list << image__b.composite(image_a, CenterGravity, DifferenceCompositeOp)
|
91
91
|
list.cur_image['Label'] = 'A difference B'
|
92
92
|
|
93
|
-
list <<
|
93
|
+
list << image__b.composite(image_a, CenterGravity, HueCompositeOp)
|
94
94
|
list.cur_image['Label'] = 'A hue B'
|
95
95
|
|
96
|
-
list <<
|
96
|
+
list << image__b.composite(image_a, CenterGravity, SaturateCompositeOp)
|
97
97
|
list.cur_image['Label'] = 'A saturate B'
|
98
98
|
|
99
|
-
list <<
|
99
|
+
list << image__b.composite(image_a, CenterGravity, LuminizeCompositeOp)
|
100
100
|
list.cur_image['Label'] = 'A luminize B'
|
101
101
|
|
102
|
-
list <<
|
102
|
+
list << image__b.composite(image_a, CenterGravity, ColorizeCompositeOp)
|
103
103
|
list.cur_image['Label'] = 'A colorize B'
|
104
104
|
|
105
|
-
list <<
|
105
|
+
list << image__b.composite(image_a, CenterGravity, BumpmapCompositeOp)
|
106
106
|
list.cur_image['Label'] = 'A bumpmap B'
|
107
107
|
|
108
|
-
list <<
|
108
|
+
list << image__b.composite(image_a, CenterGravity, DissolveCompositeOp)
|
109
109
|
list.cur_image['Label'] = 'A dissolve B'
|
110
110
|
|
111
|
-
list <<
|
111
|
+
list << image__b.composite(image_a, CenterGravity, ThresholdCompositeOp)
|
112
112
|
list.cur_image['Label'] = 'A threshold B'
|
113
113
|
|
114
|
-
list <<
|
114
|
+
list << image__b.composite(image_a, CenterGravity, ModulateCompositeOp)
|
115
115
|
list.cur_image['Label'] = 'A modulate B'
|
116
116
|
|
117
|
-
list <<
|
117
|
+
list << image_a.composite(image__b, CenterGravity, ModulateCompositeOp)
|
118
118
|
list.cur_image['Label'] = 'B modulate A'
|
119
119
|
|
120
|
-
list <<
|
120
|
+
list << image__b.composite(image_a, CenterGravity, OverlayCompositeOp)
|
121
121
|
list.cur_image['Label'] = 'A overlay B'
|
122
122
|
|
123
123
|
montage = list.montage do
|
124
124
|
self.geometry = Geometry.new(COLS, ROWS, 3, 3)
|
125
|
-
rows = (list.size+3) / 4
|
125
|
+
rows = (list.size + 3) / 4
|
126
126
|
self.tile = Geometry.new(4, rows)
|
127
127
|
self.texture = granite[0]
|
128
128
|
self.fill = 'white'
|
data/doc/ex/composite_layers.rb
CHANGED
@@ -20,7 +20,7 @@ gc.stroke = 'black'
|
|
20
20
|
gc.stroke_width = 1
|
21
21
|
|
22
22
|
23.times do
|
23
|
-
ruby << Magick::Image.new(100, 100) {self.background_color = 'none'}
|
23
|
+
ruby << Magick::Image.new(100, 100) { self.background_color = 'none' }
|
24
24
|
gc.annotate(ruby, 0, 0, 0, 0, 'Ruby')
|
25
25
|
gc.rotation = 15
|
26
26
|
end
|
@@ -43,7 +43,6 @@ begin
|
|
43
43
|
result.delay = 10
|
44
44
|
result.write('composite_layers.gif')
|
45
45
|
result[0].write('composite_layers1.gif')
|
46
|
-
|
47
46
|
rescue NotImplementedError
|
48
47
|
result = Magick::Image.read('images/notimplemented.gif').first
|
49
48
|
result.resize!(100, 100)
|
data/doc/ex/contrast.rb
CHANGED
@@ -18,12 +18,12 @@ f = 1
|
|
18
18
|
img << img.contrast
|
19
19
|
|
20
20
|
# Annotate the previous image
|
21
|
-
legend.annotate(img[f-1], 0,0,7,10, f.to_s)
|
21
|
+
legend.annotate(img[f - 1], 0, 0, 7, 10, f.to_s)
|
22
22
|
f += 1
|
23
23
|
end
|
24
24
|
|
25
25
|
# Annotate the last image
|
26
|
-
legend.annotate(img, 0,0,7,10, f.to_s)
|
26
|
+
legend.annotate(img, 0, 0, 7, 10, f.to_s)
|
27
27
|
|
28
28
|
# Montage into a single image
|
29
29
|
imgs = img.montage do
|
@@ -32,5 +32,5 @@ imgs = img.montage do
|
|
32
32
|
end
|
33
33
|
|
34
34
|
imgs.write('contrast.jpg')
|
35
|
-
#imgs.display
|
35
|
+
# imgs.display
|
36
36
|
exit
|
data/doc/ex/crop.rb
CHANGED
@@ -14,14 +14,14 @@ rect = Magick::Draw.new
|
|
14
14
|
rect.stroke('transparent')
|
15
15
|
rect.fill('white')
|
16
16
|
rect.fill_opacity(0.25)
|
17
|
-
rect.rectangle(23, 81, 107+23, 139+81)
|
17
|
+
rect.rectangle(23, 81, 107 + 23, 139 + 81)
|
18
18
|
rect.draw(img)
|
19
19
|
|
20
20
|
img.write('crop_before.png')
|
21
21
|
|
22
22
|
# Create a image to use as a background for
|
23
23
|
# the "after" image.
|
24
|
-
bg = Magick::Image.new(img.columns, img.rows) {self.background_color='none'}
|
24
|
+
bg = Magick::Image.new(img.columns, img.rows) { self.background_color = 'none' }
|
25
25
|
|
26
26
|
# Composite the the "after" (chopped) image on the background
|
27
27
|
bg = bg.composite(chopped, 23, 81, Magick::OverCompositeOp)
|
data/doc/ex/crop_with_gravity.rb
CHANGED
@@ -12,13 +12,13 @@ include Magick
|
|
12
12
|
|
13
13
|
shorts = Image.read('images/Shorts.jpg').first
|
14
14
|
|
15
|
-
regwidth = shorts.columns/2
|
16
|
-
regheight = shorts.rows/2
|
15
|
+
regwidth = shorts.columns / 2
|
16
|
+
regheight = shorts.rows / 2
|
17
17
|
|
18
|
-
mask = Image.new(regwidth, regheight) { self.background_color = 'white'}
|
18
|
+
mask = Image.new(regwidth, regheight) { self.background_color = 'white' }
|
19
19
|
mask.opacity = 0.50 * TransparentOpacity
|
20
20
|
|
21
|
-
black = Image.new(shorts.columns, shorts.rows) {self.background_color = 'black'}
|
21
|
+
black = Image.new(shorts.columns, shorts.rows) { self.background_color = 'black' }
|
22
22
|
pairs = ImageList.new
|
23
23
|
|
24
24
|
[NorthWestGravity, NorthGravity, NorthEastGravity,
|
@@ -39,4 +39,4 @@ montage = pairs.montage do
|
|
39
39
|
self.border_width = 1
|
40
40
|
end
|
41
41
|
montage.write('crop_with_gravity.miff')
|
42
|
-
#montage.display
|
42
|
+
# montage.display
|
data/doc/ex/cubic01.rb
CHANGED
@@ -2,13 +2,13 @@ require 'rvg/rvg'
|
|
2
2
|
|
3
3
|
Magick::RVG.dpi = 90
|
4
4
|
|
5
|
-
Border = {:
|
6
|
-
Connect = {:
|
7
|
-
SamplePath = {:
|
8
|
-
EndPoint = {:
|
9
|
-
CtlPoint = {:
|
10
|
-
AutoCtlPoint = {:
|
11
|
-
Label = {:
|
5
|
+
Border = { fill: 'none', stroke: 'blue', stroke_width: 1 }
|
6
|
+
Connect = { fill: 'none', stroke: '#888', stroke_width: 2 }
|
7
|
+
SamplePath = { fill: 'none', stroke: 'red', stroke_width: 5 }
|
8
|
+
EndPoint = { fill: 'none', stroke: '#888', stroke_width: 2 }
|
9
|
+
CtlPoint = { fill: '#888', stroke: 'none' }
|
10
|
+
AutoCtlPoint = { fill: 'none', stroke: 'blue', stroke_width: 4 }
|
11
|
+
Label = { font_size: 22, font_family: 'Verdana', font_weight: 'normal', font_style: 'normal' }
|
12
12
|
|
13
13
|
rvg = Magick::RVG.new(5.cm, 4.cm).viewbox(0, 0, 500, 400) do |canvas|
|
14
14
|
canvas.title = 'Example cubic01 - cubic Bezier commands in path data'
|
@@ -16,15 +16,15 @@ rvg = Magick::RVG.new(5.cm, 4.cm).viewbox(0, 0, 500, 400) do |canvas|
|
|
16
16
|
Picture showing a simple example of path data using both a
|
17
17
|
"C" and an "S" command, along with annotations showing the
|
18
18
|
control points and end points.
|
19
|
-
|
19
|
+
END_DESC
|
20
20
|
|
21
21
|
canvas.background_fill = 'white'
|
22
22
|
canvas.rect(496, 395, 1, 1).styles(Border)
|
23
23
|
|
24
|
-
canvas.polyline(100,200, 100,100).styles(Connect)
|
25
|
-
canvas.polyline(250,100, 250,200).styles(Connect)
|
26
|
-
canvas.polyline(250,200, 250,300).styles(Connect)
|
27
|
-
canvas.polyline(400,300, 400,200).styles(Connect)
|
24
|
+
canvas.polyline(100, 200, 100, 100).styles(Connect)
|
25
|
+
canvas.polyline(250, 100, 250, 200).styles(Connect)
|
26
|
+
canvas.polyline(250, 200, 250, 300).styles(Connect)
|
27
|
+
canvas.polyline(400, 300, 400, 200).styles(Connect)
|
28
28
|
|
29
29
|
canvas.path('M100,200 C100,100 250,100 250,200 S400,300 400,200').styles(SamplePath)
|
30
30
|
|