quick_magick_hooopo 0.8.1

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.
@@ -0,0 +1,60 @@
1
+ module QuickMagick
2
+ class ImageList
3
+
4
+ def initialize(*filenames)
5
+ @images = filenames.inject([]) do |image_list, filename|
6
+ image_list + QuickMagick::Image.read(filename)
7
+ end
8
+ end
9
+
10
+ # Delegate Array methods
11
+ Array.public_instance_methods(false).each do |array_public_method|
12
+ class_eval do
13
+ define_method array_public_method do |*args|
14
+ @images.send array_public_method, *args
15
+ end
16
+ end
17
+ end
18
+
19
+ # Delegate Image methods
20
+ QuickMagick::Image.public_instance_methods(false).each do |image_public_method|
21
+ class_eval do
22
+ define_method image_public_method do |*args|
23
+ @images.each do |image|
24
+ image.send image_public_method, *args
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ # Saves all images in the list to the output filename
31
+ def save(output_filename)
32
+ command_line = ""
33
+ @images.each do |image|
34
+ command_line << image.command_line
35
+ end
36
+ `convert #{command_line} "#{output_filename}"`
37
+ end
38
+
39
+ alias write save
40
+
41
+ # Returns an array of images for the images stored
42
+ def to_ary
43
+ @images
44
+ end
45
+
46
+ alias to_a to_ary
47
+
48
+ def <<(more_images)
49
+ case more_images
50
+ when QuickMagick::Image then @images << more_images
51
+ # Another image list
52
+ when QuickMagick::ImageList then self << more_images.to_a
53
+ when Array then @images += more_images
54
+ else raise QuickMagick::QuickMagickError, "Invalid argument type"
55
+ end
56
+ self
57
+ end
58
+ end
59
+
60
+ end
@@ -0,0 +1,30 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "quick_magick_hooopo"
5
+ s.version = "0.8.1"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Ahmed ElDawy"]
9
+ s.date = "2012-02-18"
10
+ s.description = "QuickMagick allows you to access ImageMagick command line functions using Ruby interface."
11
+ s.email = "ahmed.eldawy@badrit.com"
12
+ s.extra_rdoc_files = ["README.rdoc", "lib/quick_magick.rb", "lib/quick_magick/image.rb", "lib/quick_magick/image_list.rb"]
13
+ s.files = ["Manifest", "README.rdoc", "Rakefile", "lib/quick_magick.rb", "lib/quick_magick/image.rb", "lib/quick_magick/image_list.rb", "quick_magick_hooopo.gemspec", "test/9.gif", "test/badfile.xxx", "test/image_list_test.rb", "test/image_test.rb", "test/multipage.tif", "test/test_magick.rb", "test/test_quick_magick.rb", "test/warnings.tiff"]
14
+ s.homepage = "http://quickmagick.rubyforge.org/"
15
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Quick_magick_hooopo", "--main", "README.rdoc"]
16
+ s.require_paths = ["lib"]
17
+ s.rubyforge_project = "quickmagick"
18
+ s.rubygems_version = "1.8.11"
19
+ s.summary = "A gem build by BadrIT to access ImageMagick command line functions easily and quickly"
20
+ s.test_files = ["test/test_quick_magick.rb", "test/image_test.rb", "test/image_list_test.rb", "test/test_magick.rb"]
21
+
22
+ if s.respond_to? :specification_version then
23
+ s.specification_version = 3
24
+
25
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
26
+ else
27
+ end
28
+ else
29
+ end
30
+ end
Binary file
Binary file
@@ -0,0 +1,114 @@
1
+ require 'test/unit'
2
+ require 'quick_magick'
3
+ require 'fileutils'
4
+
5
+ $base_dir = File.dirname(File.expand_path(__FILE__))
6
+
7
+ class ImageTest < Test::Unit::TestCase
8
+ def setup
9
+ @logo_filename = File.join($base_dir, "imagemagick-logo.png")
10
+ `convert magick:logo "#{@logo_filename}"`
11
+ @small_logo_filename = File.join($base_dir, "logo-small.jpg")
12
+ `convert magick:logo -resize 100x100! "#{@small_logo_filename}"`
13
+ end
14
+
15
+ def teardown
16
+ File.delete(@logo_filename) if File.exists?(@logo_filename)
17
+ File.delete(@small_logo_filename) if File.exists?(@small_logo_filename)
18
+ end
19
+
20
+ def test_open_file
21
+ i = QuickMagick::ImageList.new(@logo_filename)
22
+ assert_equal 1, i.length
23
+ end
24
+
25
+ def test_save_multipage
26
+ i = QuickMagick::ImageList.new(@logo_filename, @small_logo_filename)
27
+ assert_equal 2, i.length
28
+ out_filename = File.join($base_dir, "out.tif")
29
+ i.save out_filename
30
+
31
+ i = QuickMagick::Image.read(out_filename)
32
+ assert_equal 2, i.length
33
+ assert_equal 100, i[1].width
34
+ ensure
35
+ File.delete(out_filename) if out_filename && File.exists?(out_filename)
36
+ end
37
+
38
+ def test_bulk_resize
39
+ i = QuickMagick::ImageList.new(@logo_filename, @small_logo_filename)
40
+ i.resize "50x50!"
41
+ out_filename = File.join($base_dir, "out.tif")
42
+ i.save out_filename
43
+
44
+ i = QuickMagick::Image.read(out_filename)
45
+ assert_equal 2, i.length
46
+ assert_equal 50, i[0].width
47
+ assert_equal 50, i[1].width
48
+ ensure
49
+ File.delete(out_filename) if out_filename && File.exists?(out_filename)
50
+ end
51
+
52
+ def test_append_image
53
+ i = QuickMagick::ImageList.new
54
+ i << QuickMagick::Image.read(@logo_filename)
55
+ i << QuickMagick::Image.read(@small_logo_filename)
56
+ i.resize "50x50!"
57
+ out_filename = File.join($base_dir, "out.tif")
58
+ i.save out_filename
59
+
60
+ i = QuickMagick::Image.read(out_filename)
61
+ assert_equal 2, i.length
62
+ assert_equal 50, i[0].width
63
+ assert_equal 50, i[1].width
64
+ ensure
65
+ File.delete(out_filename) if out_filename && File.exists?(out_filename)
66
+ end
67
+
68
+ def test_different_operators
69
+ i = QuickMagick::ImageList.new
70
+ i << QuickMagick::Image.read(@logo_filename)
71
+ i << QuickMagick::Image.read(@small_logo_filename)
72
+ i[0].resize "50x50!"
73
+ i[1].resize "75x75!"
74
+ out_filename = File.join($base_dir, "out.tif")
75
+ i.save out_filename
76
+
77
+ i = QuickMagick::Image.read(out_filename)
78
+ assert_equal 2, i.length
79
+ assert_equal 50, i[0].width
80
+ assert_equal 75, i[1].width
81
+ ensure
82
+ File.delete(out_filename) if out_filename && File.exists?(out_filename)
83
+ end
84
+
85
+ def test_resize_one_image_in_a_list
86
+ i = QuickMagick::ImageList.new
87
+ i << QuickMagick::Image.read(@logo_filename)
88
+ i << QuickMagick::Image.read(@small_logo_filename)
89
+ i[0].resize "50x50!"
90
+ out_filename = File.join($base_dir, "out.tif")
91
+ i.save out_filename
92
+
93
+ i = QuickMagick::Image.read(out_filename)
94
+ assert_equal 2, i.length
95
+ assert_equal 50, i[0].width
96
+ assert_equal 100, i[1].width
97
+ ensure
98
+ File.delete(out_filename) if out_filename && File.exists?(out_filename)
99
+ end
100
+
101
+ def test_bulk_convert
102
+ i = QuickMagick::ImageList.new(@logo_filename, @small_logo_filename)
103
+ i.format = 'gif'
104
+ i.save!
105
+
106
+ out_filename1 = @logo_filename.sub('.png', '.gif')
107
+ out_filename2 = @small_logo_filename.sub('.jpg', '.gif')
108
+ assert File.exists?(out_filename1)
109
+ assert File.exists?(out_filename2)
110
+ ensure
111
+ File.delete(out_filename1) if out_filename1 && File.exists?(out_filename1)
112
+ File.delete(out_filename2) if out_filename2 && File.exists?(out_filename2)
113
+ end
114
+ end
@@ -0,0 +1,336 @@
1
+ require 'test/unit'
2
+ require 'quick_magick'
3
+
4
+ $base_dir = File.dirname(File.expand_path(__FILE__))
5
+
6
+ class ImageTest < Test::Unit::TestCase
7
+
8
+ def setup
9
+ @logo_filename = File.join($base_dir, "imagemagick-logo.png")
10
+ `convert magick:logo "#{@logo_filename}"`
11
+ @small_logo_filename = File.join($base_dir, "logo-small.jpg")
12
+ `convert magick:logo -resize 100x100! "#{@small_logo_filename}"`
13
+ end
14
+
15
+ def teardown
16
+ File.delete(@logo_filename) if File.exists?(@logo_filename)
17
+ File.delete(@small_logo_filename) if File.exists?(@small_logo_filename)
18
+ end
19
+
20
+ def test_open_existing_image
21
+ i = QuickMagick::Image.read(@logo_filename)
22
+ assert_equal 1, i.size
23
+ end
24
+
25
+ def test_skip_warnings
26
+ filename = File.join($base_dir, "warnings.tiff")
27
+ i = QuickMagick::Image.read(filename)
28
+ assert_equal 1, i.size
29
+ end
30
+
31
+ def test_create_from_blob
32
+ blob = nil
33
+ File.open(@logo_filename, "rb") do |f|
34
+ blob = f.read
35
+ end
36
+ i = QuickMagick::Image.from_blob(blob)
37
+ assert_equal 1, i.size
38
+ end
39
+
40
+ def test_multipage_with_blob
41
+ blob = nil
42
+ image_filename = File.join($base_dir, "multipage.tif")
43
+ File.open(image_filename, "rb") do |f|
44
+ blob = f.read
45
+ end
46
+ i = QuickMagick::Image.from_blob(blob)
47
+ assert_equal 2, i.size
48
+
49
+ out1 = File.join($base_dir, "test1.jpg")
50
+ out2 = File.join($base_dir, "test2.jpg")
51
+ i.pop.save out1
52
+ i.pop.save out2
53
+ assert_equal 464, QuickMagick::Image.read(out1).first.width
54
+ assert_equal 100, QuickMagick::Image.read(out2).first.width
55
+ ensure
56
+ File.delete(out1) if out1 && File.exists?(out1)
57
+ File.delete(out2) if out2 && File.exists?(out2)
58
+ end
59
+
60
+ def test_image_info
61
+ i = QuickMagick::Image.read(@logo_filename).first
62
+ assert_equal 640, i.width
63
+ assert_equal 480, i.height
64
+ end
65
+
66
+ def test_open_non_existing_file
67
+ image_filename = File.join($base_dir, "space.png")
68
+ assert_raises QuickMagick::QuickMagickError do
69
+ i = QuickMagick::Image.read(image_filename)
70
+ end
71
+ end
72
+
73
+ def test_open_bad_file
74
+ image_filename = File.join($base_dir, "badfile.xxx")
75
+ assert_raises QuickMagick::QuickMagickError do
76
+ i = QuickMagick::Image.read(image_filename)
77
+ end
78
+ end
79
+
80
+ def test_open_mulitpage_file
81
+ image_filename = File.join($base_dir, "multipage.tif")
82
+ i = QuickMagick::Image.read(image_filename)
83
+ assert_equal 2, i.size
84
+ assert_equal 100, i[0].width
85
+ assert_equal 464, i[1].width
86
+ end
87
+
88
+ def test_resize_image
89
+ i = QuickMagick::Image.read(@logo_filename).first
90
+ i.resize("300x300!")
91
+ out_filename = File.join($base_dir, "imagemagick-resized.png")
92
+ File.delete out_filename if File.exists?(out_filename)
93
+ i.save(out_filename)
94
+ assert File.exists?(out_filename)
95
+ i2 = QuickMagick::Image.read(out_filename).first
96
+ assert_equal 300, i2.width
97
+ assert_equal 300, i2.height
98
+ ensure
99
+ # clean up
100
+ File.delete(out_filename) if out_filename && File.exists?(out_filename)
101
+ end
102
+
103
+
104
+ def test_monochrome
105
+ i = QuickMagick::Image.read(@logo_filename).first
106
+ i.resize("300x300!")
107
+ i.monochrome
108
+ out_filename = File.join($base_dir, "imagemagick-resized.png")
109
+ File.delete out_filename if File.exists?(out_filename)
110
+ i.save(out_filename)
111
+ assert File.exists?(out_filename)
112
+ i2 = QuickMagick::Image.read(out_filename).first
113
+ assert_equal 300, i2.width
114
+ assert_equal 300, i2.height
115
+ ensure
116
+ # clean up
117
+ File.delete(out_filename) if out_filename && File.exists?(out_filename)
118
+ end
119
+
120
+ def test_read_with_initialize
121
+ i = QuickMagick::Image.read(@logo_filename) do |image|
122
+ image.resize("300x300!")
123
+ image.colors = 2
124
+ end.first
125
+ out_filename = File.join($base_dir, "imagemagick-resized.png")
126
+ File.delete out_filename if File.exists?(out_filename)
127
+ i.save(out_filename)
128
+ assert File.exists?(out_filename)
129
+ i2 = QuickMagick::Image.read(out_filename).first
130
+ assert_equal 300, i2.width
131
+ assert_equal 300, i2.height
132
+ ensure
133
+ # clean up
134
+ File.delete(out_filename) if out_filename && File.exists?(out_filename)
135
+ end
136
+
137
+ def test_crop_image
138
+ i = QuickMagick::Image.read(@logo_filename).first
139
+ i.crop("300x200+0+0")
140
+ out_filename = File.join($base_dir, "imagemagick-cropped.png")
141
+ File.delete out_filename if File.exists?(out_filename)
142
+ i.save(out_filename)
143
+ assert File.exists?(out_filename)
144
+ i2 = QuickMagick::Image.read(out_filename).first
145
+ assert_equal 300, i2.width
146
+ assert_equal 200, i2.height
147
+ ensure
148
+ # clean up
149
+ File.delete(out_filename) if out_filename && File.exists?(out_filename)
150
+ end
151
+
152
+ def test_resize_with_geometry_options
153
+ i = QuickMagick::Image.read(@logo_filename).first
154
+ i.resize(300, 300, nil, nil, QuickMagick::AspectGeometry)
155
+ out_filename = File.join($base_dir, "imagemagick-resized.png")
156
+ File.delete out_filename if File.exists?(out_filename)
157
+ i.save(out_filename)
158
+ assert File.exists?(out_filename)
159
+ i2 = QuickMagick::Image.read(out_filename).first
160
+ assert_equal 300, i2.width
161
+ assert_equal 300, i2.height
162
+ ensure
163
+ # clean up
164
+ File.delete(out_filename) if out_filename && File.exists?(out_filename)
165
+ end
166
+
167
+ def test_resize_with_append_to_operators
168
+ i = QuickMagick::Image.read(@logo_filename).first
169
+ i.append_to_operators 'resize', '300x300!'
170
+ out_filename = File.join($base_dir, "imagemagick-resized.png")
171
+ File.delete out_filename if File.exists?(out_filename)
172
+ i.save(out_filename)
173
+ assert File.exists?(out_filename)
174
+ i2 = QuickMagick::Image.read(out_filename).first
175
+ assert_equal 300, i2.width
176
+ assert_equal 300, i2.height
177
+ ensure
178
+ # clean up
179
+ File.delete(out_filename) if out_filename && File.exists?(out_filename)
180
+ end
181
+
182
+ def test_create_solid_image
183
+ i = QuickMagick::Image.solid(100, 100, :white)
184
+ #assert_equal 100, i.width
185
+ end
186
+
187
+ def test_create_gradient_image
188
+ i = QuickMagick::Image.gradient(100, 100, QuickMagick::RadialGradient, :yellow, :blue)
189
+ #assert_equal 100, i.width
190
+ end
191
+
192
+ def test_line_primitive
193
+ i = QuickMagick::Image.solid(100, 100, :white)
194
+ i.draw_line(0, 0, 50, 50)
195
+ out_filename = File.join($base_dir, "line_test.gif")
196
+ i.save out_filename
197
+ ensure
198
+ # clean up
199
+ File.delete(out_filename) if out_filename && File.exists?(out_filename)
200
+ end
201
+
202
+ def test_text_primitive
203
+ i = QuickMagick::Image.solid(100, 100, :white)
204
+ i.draw_text(0, 50, "Ahmed Eldawy")
205
+ out_filename = File.join($base_dir, "text_test.gif")
206
+ i.save out_filename
207
+ ensure
208
+ # clean up
209
+ File.delete(out_filename) if out_filename && File.exists?(out_filename)
210
+ end
211
+
212
+ def test_line_and_circle
213
+ i = QuickMagick::Image.solid(100, 100)
214
+ i.draw_line(0,0,20,20)
215
+ i.draw_circle(30,30,20,20)
216
+ assert_equal %Q{ "(" -size 100x100 -draw " line 0,0 20,20 circle 30,30 20,20" "xc:" ")" }, i.command_line
217
+ out_filename = File.join($base_dir, "draw_test.gif")
218
+ i.save out_filename
219
+ ensure
220
+ # clean up
221
+ File.delete(out_filename) if out_filename && File.exists?(out_filename)
222
+ end
223
+
224
+ def test_lines_with_colors
225
+ i = QuickMagick::Image.solid(100, 100, :white)
226
+ i.stroke = "red"
227
+ i.draw_line(0,0,20,20)
228
+ i.stroke = "blue"
229
+ i.draw_circle(30,30,20,20)
230
+ out_filename = File.join($base_dir, "draw_test.gif")
231
+ i.save out_filename
232
+ ensure
233
+ # clean up
234
+ File.delete(out_filename) if out_filename && File.exists?(out_filename)
235
+ end
236
+
237
+ def test_to_blob_default_format
238
+ i = QuickMagick::Image.solid(100, 100)
239
+ i.draw_line(0,0,20,20)
240
+ i.draw_circle(30,30,20,20)
241
+ blob = i.to_blob
242
+ i2 = QuickMagick::Image.from_blob(blob).first
243
+ assert_equal 100, i2.width
244
+ assert_equal 100, i2.height
245
+ assert_equal 'JPEG', i2.format
246
+ end
247
+
248
+ def test_to_blob_with_custom_format
249
+ i = QuickMagick::Image.solid(100, 100)
250
+ i.draw_line(0,0,20,20)
251
+ i.draw_circle(30,30,20,20)
252
+ i.format = 'gif'
253
+ blob = i.to_blob
254
+ i2 = QuickMagick::Image.from_blob(blob).first
255
+ assert_equal 'GIF', i2.format
256
+ end
257
+
258
+ def test_to_blob_with_original_format
259
+ i = QuickMagick::Image.read(@logo_filename).first
260
+ blob = i.to_blob
261
+ i2 = QuickMagick::Image.from_blob(blob).first
262
+ assert_equal 'PNG', i2.format
263
+ end
264
+
265
+ def test_colors
266
+ assert_equal "#00ff00ff", QuickMagick::rgb_color(0, 255, 0)
267
+ assert_equal "#00007fff", QuickMagick::rgb_color(0, 0, 0.5)
268
+ assert_equal "#3f0000ff", QuickMagick::rgb_color("25%" ,0 , 0)
269
+
270
+ assert_equal "#ff00007f", QuickMagick::rgba_color(1.0, 0, 0, 0.5)
271
+
272
+ assert_equal "#7f7f7f7f", QuickMagick::graya_color(0.5, 0.5)
273
+
274
+ assert_equal "hsla(30,50%,50%,1)", QuickMagick::hsl_color(30, 127, 127)
275
+ assert_equal "hsla(180,50%,50%,0.5)", QuickMagick::hsla_color(Math::PI, 0.5, "50%", 0.5)
276
+ end
277
+
278
+ def test_revert
279
+ i = QuickMagick::Image.read(@logo_filename).first
280
+ i.resize("300x300!")
281
+ i.revert!
282
+ out_filename = File.join($base_dir, "imagemagick-resized.png")
283
+ File.delete out_filename if File.exists?(out_filename)
284
+ i.save(out_filename)
285
+ assert File.exists?(out_filename)
286
+ i2 = QuickMagick::Image.read(out_filename).first
287
+ assert_equal 640, i2.width
288
+ assert_equal 480, i2.height
289
+ ensure
290
+ File.delete out_filename if File.exists?(out_filename)
291
+ end
292
+
293
+ def test_image_converted_from_pseudo_to_normal
294
+ i = QuickMagick::Image.solid(100, 100, :white)
295
+ i.stroke = "red"
296
+ i.draw_line(0,0,20,20)
297
+ out_filename = File.join($base_dir, "draw_test.gif")
298
+ assert_raises QuickMagick::QuickMagickError do
299
+ i.save!
300
+ end
301
+ i.save out_filename
302
+ # Now it's non pseudo
303
+ i.save!
304
+ end
305
+
306
+ def test_antialias
307
+ i = QuickMagick::Image.solid(100, 100, :white)
308
+ i.antialias = false
309
+ assert i.command_line =~ /\+antialias/
310
+
311
+ i = QuickMagick::Image.solid(100, 100, :white)
312
+ i.antialias = true
313
+ assert i.command_line =~ /\-antialias/
314
+
315
+ i = QuickMagick::Image.solid(100, 100, :white) { |img| img.antialias = false}
316
+ assert i.command_line =~ /\+antialias/
317
+ end
318
+
319
+ def test_get_pixel
320
+ image = QuickMagick::Image.read(@logo_filename)[0]
321
+ assert_equal [2,90,164], image.get_pixel(356, 286)
322
+ end
323
+
324
+ def test_get_pixel_with_multipage
325
+ image_filename = File.join($base_dir, "multipage.tif")
326
+ image = QuickMagick::Image.read(image_filename)[1]
327
+ assert_equal [234,43,44], image.get_pixel(256,73)
328
+ end
329
+
330
+ def test_details
331
+ image_details = QuickMagick::Image.read(@logo_filename)[0].details
332
+ assert_equal Hash, image_details.class
333
+ assert_equal ["Image"], image_details.keys
334
+ assert_equal "228.364 (0.895545)", image_details["Image"]["Channel statistics"]["Red"]["mean"]
335
+ end
336
+ end