rmagick4j 0.3.6 → 0.3.7
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.
- data/Manifest.txt +122 -107
- data/lib/RMagick.rb +84 -4
- data/lib/magick4j.jar +0 -0
- data/lib/rmagick4j/constants.rb +1 -0
- data/lib/rmagick4j/image.rb +51 -3
- data/lib/rmagick4j/image_list.rb +4 -0
- data/lib/rmagick4j/rmagick4j.rb +0 -1
- data/lib/rmagick4j/version.rb +1 -1
- data/test/eyetests/bullseye.rb +2 -1
- data/test/eyetests/doc.rb +79 -0
- data/test/eyetests/tests/draw_multiline_type_metrics.rb +1 -1
- data/test/eyetests/tests/draw_pop_push.rb +16 -0
- data/test/eyetests/tests/draw_pop_push_translate.rb +1 -1
- data/test/eyetests/tests/effect_blur.rb +9 -0
- data/test/eyetests/tests/effect_charcoal.rb +9 -0
- data/test/eyetests/tests/effect_edge.rb +9 -0
- data/test/eyetests/tests/effect_implode.rb +9 -0
- data/test/eyetests/tests/effect_negate.rb +9 -0
- data/test/eyetests/tests/effect_negate_true.rb +9 -0
- data/test/eyetests/tests/effect_normalize.rb +9 -0
- data/test/eyetests/tests/effect_shade.rb +9 -0
- data/test/eyetests/tests/effect_solarize.rb +10 -0
- data/test/eyetests/tests/effect_wave.rb +9 -0
- data/test/eyetests/tests/gradient_fill_vertical_fill.rb +1 -1
- data/test/eyetests/tests/gruff_dot_1.rb +19 -0
- data/test/eyetests/tests/gruff_line_2.rb +1 -1
- data/test/eyetests/tests/gruff_pie_1.rb +1 -1
- data/test/eyetests/tests/gruff_stacked_area_1.rb +23 -0
- data/test/eyetests/tests/new_image.rb +8 -1
- data/test/gruff_tests/test/gruff_test_case.rb +5 -2
- data/test/gruff_tests/test/test_bar.rb +15 -3
- data/test/gruff_tests/test/test_bullet.rb +26 -26
- data/test/gruff_tests/test/test_dot.rb +273 -0
- data/test/gruff_tests/test/test_legend.rb +37 -40
- data/test/gruff_tests/test/test_line.rb +75 -14
- data/test/gruff_tests/test/test_mini_bar.rb +1 -0
- data/test/gruff_tests/test/test_stacked_area.rb +52 -0
- data/test/spec/draw_spec.rb +1 -0
- data/test/spec/image_spec.rb +15 -1
- data/test/spec/stories/geometry_runner.rb +1 -1
- data/test/spec/stories/geometry_story.rb +1 -1
- metadata +186 -164
- data/lib/jhlabs-filters.jar +0 -0
data/lib/rmagick4j/image_list.rb
CHANGED
data/lib/rmagick4j/rmagick4j.rb
CHANGED
@@ -3,7 +3,6 @@ require 'java'
|
|
3
3
|
rmagick4j_dir = File.dirname(__FILE__)
|
4
4
|
|
5
5
|
# TODO See about using Raven to get gems of jhlabs and svgsalamander?
|
6
|
-
require File.join(rmagick4j_dir, '..', 'jhlabs-filters.jar')
|
7
6
|
require File.join(rmagick4j_dir, '..', 'magick4j.jar')
|
8
7
|
require File.join(rmagick4j_dir, '..', 'svgsalamander.jar')
|
9
8
|
|
data/lib/rmagick4j/version.rb
CHANGED
data/test/eyetests/bullseye.rb
CHANGED
@@ -101,11 +101,12 @@ module Bullseye
|
|
101
101
|
@default_model = DefaultListModel.new
|
102
102
|
super(@default_model)
|
103
103
|
load_test_scripts
|
104
|
+
|
104
105
|
self.setSelectedIndex(0)
|
105
106
|
end
|
106
107
|
|
107
108
|
def load_test_scripts
|
108
|
-
Dir[File.dirname(__FILE__) + '/tests/*.rb'].each do |script|
|
109
|
+
Dir[File.dirname(__FILE__) + '/tests/*.rb'].sort.each do |script|
|
109
110
|
script = script.gsub(/(^.*tests\/|.rb$)/,'').split('_').map{|x| x.capitalize}.join(' ')
|
110
111
|
@default_model.addElement(script) unless script == 'New Image'
|
111
112
|
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'erb'
|
2
|
+
require 'ftools'
|
3
|
+
|
4
|
+
if ARGV.size == 0
|
5
|
+
puts 'usage: ruby doc.rb directory'
|
6
|
+
exit
|
7
|
+
end
|
8
|
+
|
9
|
+
File.makedirs ARGV[0] unless File.exists?(ARGV[0]) && File.directory?(ARGV[0])
|
10
|
+
|
11
|
+
IMAGE_DIR = File.join(ARGV[0], 'img')
|
12
|
+
|
13
|
+
File.makedirs IMAGE_DIR unless File.exists?(IMAGE_DIR) && File.directory?(IMAGE_DIR)
|
14
|
+
|
15
|
+
TESTS= Dir[File.join(File.dirname(__FILE__),'tests','*.rb')].reject{|x| x=~ /new_image.rb$/ }
|
16
|
+
|
17
|
+
IMAGES = []
|
18
|
+
|
19
|
+
i = 0
|
20
|
+
size = TESTS.size
|
21
|
+
|
22
|
+
TESTS.each do |test|
|
23
|
+
i += 1
|
24
|
+
puts "Running #{test} in JRuby. #{i}/#{size}"
|
25
|
+
`jruby #{test} #{IMAGE_DIR}`
|
26
|
+
puts "Running #{test} in Ruby. #{i}/#{size}"
|
27
|
+
`sh -c 'ruby #{test} #{IMAGE_DIR}'`
|
28
|
+
IMAGES << test.split(/\//).last[0...-3]
|
29
|
+
end
|
30
|
+
|
31
|
+
template = %{
|
32
|
+
<html>
|
33
|
+
|
34
|
+
<head>
|
35
|
+
<title>RMagick4J Vs. RMagick</title>
|
36
|
+
</head>
|
37
|
+
|
38
|
+
<body>
|
39
|
+
These examples are supposed to show:<br/>
|
40
|
+
<ul>
|
41
|
+
<li>There are some bugs in RMagick4J<li>
|
42
|
+
<li>There are still a lot of features left in RMagick4J (I will continue working on this project after GSoC)</li>
|
43
|
+
<li>There are some bugs in ImageMagick and, therefore, in RMagick</li>
|
44
|
+
</ul>
|
45
|
+
<table>
|
46
|
+
<% i = 0 %>
|
47
|
+
<% IMAGES.sort.each do |img| %>
|
48
|
+
<% if i % 4 == 0 %>
|
49
|
+
<tr>
|
50
|
+
<td >RMagick4J</td>
|
51
|
+
<td>RMagick</td>
|
52
|
+
</tr>
|
53
|
+
<% end %>
|
54
|
+
<tr>
|
55
|
+
<td>
|
56
|
+
<img src="<%= File.join('img', img) %>.jruby.jpg"/>
|
57
|
+
</td>
|
58
|
+
<td>
|
59
|
+
<img src="<%= File.join('img', img) %>.mri.jpg"/>
|
60
|
+
</td>
|
61
|
+
</tr>
|
62
|
+
<% i += 1%>
|
63
|
+
<% end %>
|
64
|
+
</table>
|
65
|
+
</body>
|
66
|
+
|
67
|
+
</html>
|
68
|
+
}.gsub(/^ /, '')
|
69
|
+
|
70
|
+
puts 'Running template'
|
71
|
+
rhtml = ERB.new template
|
72
|
+
|
73
|
+
doc = rhtml.result binding
|
74
|
+
|
75
|
+
html = File.new(File.join(ARGV[0], 'index.html'), 'w')
|
76
|
+
|
77
|
+
html.write doc
|
78
|
+
|
79
|
+
html.close
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'new_image.rb')
|
2
|
+
|
3
|
+
include Magick
|
4
|
+
|
5
|
+
clown = Image.load("clown.jpg").first
|
6
|
+
|
7
|
+
draw = Draw.new
|
8
|
+
draw.push
|
9
|
+
draw.stroke 'green'
|
10
|
+
draw.fill 'yellow'
|
11
|
+
draw.circle clown.columns/2, clown.rows/2, clown.columns/4, clown.rows/2
|
12
|
+
draw.pop
|
13
|
+
|
14
|
+
draw.draw clown
|
15
|
+
|
16
|
+
clown.write "draw_pop_push.jpg"
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'new_image.rb')
|
2
|
+
|
3
|
+
include Magick
|
4
|
+
|
5
|
+
clown = Image.load("clown.jpg").first
|
6
|
+
|
7
|
+
# The parameter is quite important, 'cause in RMagick4J QuantumRange is 256 and in ImageMagick it can change.
|
8
|
+
clown = clown.solarize(27.5.to_threshold)
|
9
|
+
|
10
|
+
clown.write "effect_solarize.jpg"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'gruff'
|
3
|
+
require File.join(File.dirname(__FILE__), 'new_image.rb')
|
4
|
+
|
5
|
+
g = Gruff::Dot.new
|
6
|
+
g.title = "Dot Graph With Manual Colors"
|
7
|
+
g.labels = {
|
8
|
+
0 => '5/6',
|
9
|
+
1 => '5/15',
|
10
|
+
2 => '5/24',
|
11
|
+
3 => '5/30',
|
12
|
+
}
|
13
|
+
g.data(:Art, [0, 5, 8, 15], '#990000')
|
14
|
+
g.data(:Philosophy, [10, 3, 2, 8], '#009900')
|
15
|
+
g.data(:Science, [2, 15, 8, 11], '#990099')
|
16
|
+
|
17
|
+
g.minimum_value = 0
|
18
|
+
|
19
|
+
g.write("gruff_dot_1.jpg")
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'gruff'
|
3
|
+
require File.join(File.dirname(__FILE__), 'new_image.rb')
|
4
|
+
|
5
|
+
@datasets = [
|
6
|
+
[:Jimmy, [25, 36, 86, 39]],
|
7
|
+
[:Charles, [80, 54, 67, 54]],
|
8
|
+
[:Julie, [22, 29, 35, 38]],
|
9
|
+
]
|
10
|
+
|
11
|
+
g = Gruff::StackedArea.new
|
12
|
+
|
13
|
+
g.labels = {
|
14
|
+
0 => '5/6',
|
15
|
+
1 => '5/15',
|
16
|
+
2 => '5/24',
|
17
|
+
3 => '5/30'
|
18
|
+
}
|
19
|
+
|
20
|
+
@datasets.each do |data|
|
21
|
+
g.data(data[0], data[1])
|
22
|
+
end
|
23
|
+
g.write "gruff_stacked_area_1.jpg"
|
@@ -5,6 +5,13 @@ else
|
|
5
5
|
require "RMagick"
|
6
6
|
end
|
7
7
|
|
8
|
+
class Float
|
9
|
+
|
10
|
+
def to_threshold
|
11
|
+
self/255 * Magick::QuantumRange
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
8
15
|
class Magick::Image
|
9
16
|
alias_method :old_write, :write
|
10
17
|
|
@@ -12,7 +19,7 @@ class Magick::Image
|
|
12
19
|
file = File.join(File.expand_path(File.dirname(__FILE__)), '..', '..', 'images', filename)
|
13
20
|
self.read file, &add
|
14
21
|
end
|
15
|
-
|
22
|
+
|
16
23
|
def write(filename)
|
17
24
|
engine = (PLATFORM == 'java' ? 'jruby' : 'mri')
|
18
25
|
new_filename = filename.sub(/(\.[^\.]*)$/, '.' + engine + '\1')
|
@@ -3,9 +3,12 @@ require 'rubygems'
|
|
3
3
|
|
4
4
|
require 'test/unit'
|
5
5
|
require 'gruff'
|
6
|
-
require
|
6
|
+
require 'fileutils'
|
7
7
|
# require 'test_timer'
|
8
8
|
|
9
|
+
TEST_OUTPUT_DIR = File.dirname(__FILE__) + "/output"
|
10
|
+
FileUtils.mkdir_p(TEST_OUTPUT_DIR)
|
11
|
+
|
9
12
|
class GruffTestCase < Test::Unit::TestCase
|
10
13
|
|
11
14
|
def setup
|
@@ -77,7 +80,7 @@ protected
|
|
77
80
|
end
|
78
81
|
|
79
82
|
def write_test_file(graph, filename)
|
80
|
-
graph.write(
|
83
|
+
graph.write([TEST_OUTPUT_DIR, filename].join("/"))
|
81
84
|
end
|
82
85
|
|
83
86
|
##
|
@@ -114,12 +114,12 @@ class TestGruffBar < GruffTestCase
|
|
114
114
|
|
115
115
|
def test_set_legend_box_size
|
116
116
|
g = setup_basic_graph(400)
|
117
|
-
g.title = "Set Legend Box Size"
|
117
|
+
g.title = "Set Small Legend Box Size"
|
118
118
|
g.legend_box_size = 10.0
|
119
119
|
g.write("test/output/bar_set_legend_box_size_sm.png")
|
120
120
|
|
121
121
|
g = setup_basic_graph(400)
|
122
|
-
g.title = "Set Legend Box Size"
|
122
|
+
g.title = "Set Large Legend Box Size"
|
123
123
|
g.legend_box_size = 50.0
|
124
124
|
g.write("test/output/bar_set_legend_box_size_lg.png")
|
125
125
|
end
|
@@ -233,7 +233,7 @@ class TestGruffBar < GruffTestCase
|
|
233
233
|
:colors => %w(#efd250 #666699 #e5573f #9595e2),
|
234
234
|
:marker_color => 'white',
|
235
235
|
:font_color => 'blue',
|
236
|
-
:background_image =>
|
236
|
+
:background_image => "assets/pc306715.jpg"
|
237
237
|
}
|
238
238
|
g.labels = {
|
239
239
|
0 => '5/6',
|
@@ -248,6 +248,18 @@ class TestGruffBar < GruffTestCase
|
|
248
248
|
g.minimum_value = 0
|
249
249
|
g.write("test/output/bar_themed.png")
|
250
250
|
end
|
251
|
+
|
252
|
+
def test_legend_should_not_overlap
|
253
|
+
g = Gruff::Bar.new(400)
|
254
|
+
g.theme_37signals()
|
255
|
+
g.title = 'My Graph'
|
256
|
+
g.data("Apples Oranges Watermelon Apples Oranges", [1, 2, 3, 4, 4, 3])
|
257
|
+
g.data('Oranges', [4, 8, 7, 9, 8, 9])
|
258
|
+
g.data('Watermelon', [2, 3, 1, 5, 6, 8])
|
259
|
+
g.data('Peaches', [9, 9, 10, 8, 7, 9])
|
260
|
+
g.labels = {0 => '2003', 2 => '2004', 4 => '2005'}
|
261
|
+
g.write("test/output/bar_long_legend_text.png")
|
262
|
+
end
|
251
263
|
|
252
264
|
def test_july_enhancements
|
253
265
|
g = Gruff::Bar.new(600)
|
@@ -1,26 +1,26 @@
|
|
1
|
-
require File.dirname(__FILE__) + "/gruff_test_case"
|
2
|
-
|
3
|
-
class TestGruffBullet < GruffTestCase
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
end
|
1
|
+
# require File.dirname(__FILE__) + "/gruff_test_case"
|
2
|
+
#
|
3
|
+
# class TestGruffBullet < GruffTestCase
|
4
|
+
#
|
5
|
+
# def setup
|
6
|
+
# @data_args = [75, 100, {
|
7
|
+
# :target => 80,
|
8
|
+
# :low => 50,
|
9
|
+
# :high => 90
|
10
|
+
# }]
|
11
|
+
# end
|
12
|
+
#
|
13
|
+
# def test_bullet_graph
|
14
|
+
# g = Gruff::Bullet.new
|
15
|
+
# g.title = "Monthly Revenue"
|
16
|
+
# g.data *@data_args
|
17
|
+
# g.write("test/output/bullet_greyscale.png")
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
# def test_no_options
|
21
|
+
# g = Gruff::Bullet.new
|
22
|
+
# g.data 127, 150
|
23
|
+
# g.write("test/output/bullet_no_options.png")
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
# end
|