quick_magick 0.1.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of quick_magick might be problematic. Click here for more details.

data/Manifest ADDED
@@ -0,0 +1,13 @@
1
+ README
2
+ Rakefile
3
+ lib/quick_magick/image.rb
4
+ lib/quick_magick/image_list.rb
5
+ lib/quick_magick.rb
6
+ Manifest
7
+ quick_magick.gemspec
8
+ test/image_test.rb
9
+ test/logo-small.jpg
10
+ test/badfile.xxx
11
+ test/multipage.tif
12
+ test/image_list_test.rb
13
+ test/imagemagick-logo.png
data/README ADDED
@@ -0,0 +1,64 @@
1
+ == QuickMagick
2
+
3
+ QuickMagick is a gem for easily accessing ImageMagick command line tools from Ruby programs.
4
+
5
+ == What is different?
6
+
7
+ But what's different from other gems like RMagick and mini-magick?
8
+ RMagick is a very good gem and QuickMagick is not a replacement of it.
9
+ RMagick mainpulates images in memory.
10
+ This is sometimes preferable but not in all cases.
11
+ It uses a huge amonut of memory when manipulating images of large sizes.
12
+ QuickMagick allows you to access all the powerful commands of ImageMagick that are accessible from command line.
13
+ When you need more advanced options like reading pixel values, you should go to RMagick.
14
+
15
+ The idea of this gem came from mini-magick.
16
+ I used mini-magick for a little time but I found that some advanced options are missing.
17
+ For example, you cannot manipulate multipage images.
18
+ Also, it uses "mogrify" and creates temporary files to simulate the "convert" command which makes it slower as it accesses the disk multiple times.
19
+ Another small stuf is that it relies on method_missing to set command line arguments which is slow and not preferable.
20
+
21
+ In QuickMagick I tried to solve the above problems while keeping the API as easy as possible.
22
+
23
+ == Examples
24
+
25
+ Determine image information
26
+ i = QuickMagick::Image.read('test.jpg').first
27
+ i.width # Retrieves width in pixels
28
+ i.height # Retrieves height in pixels
29
+
30
+ Resize and image
31
+ i = QuickMagick::Image.read('test.jpg').first
32
+ i.resize "300x300!"
33
+ i.save "resized_image.jpg"
34
+
35
+ or
36
+ i.append_to_args 'resize', "300x300!"
37
+
38
+ or
39
+ i.resize 300, 300, nil, nil, QuickMagick::AspectGeometry
40
+
41
+
42
+ Access multipage image
43
+ i = QuickMagick::Image.read("multipage.pdf") {|image| image.density = 300}
44
+ i.size % number of pages
45
+ i.each_with_index do |page, i|
46
+ i.save "page_#{i}.jpg"
47
+ end
48
+
49
+ From blob
50
+ i = QuickMagick::Image.from_blob(blob_data).first
51
+ i.sample "100x100!"
52
+ i.save
53
+
54
+ Modify a file (mogrify)
55
+ i = QuickMagick::Image.read('test.jpg')
56
+ i.resize "100x100!"
57
+ i.save!
58
+
59
+ You can also display an image to Xserver
60
+ i = QuickMagick::Image.read('test.jpg')
61
+ i.display
62
+
63
+ Check all command line options of ImageMagick at
64
+ http://www.imagemagick.org/script/convert.php
data/Rakefile ADDED
@@ -0,0 +1,14 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'echoe'
4
+
5
+ Echoe.new('quick_magick', '0.1.0') do |p|
6
+ p.description = "QuickMagick allows you to access ImageMagick command line functions using Ruby interface."
7
+ p.url = "http://quickmagick.rubyforge.org/"
8
+ p.author = "Ahmed ElDawy"
9
+ p.email = "ahmed.eldawy@badrit.com"
10
+ p.project = "quickmagick"
11
+ end
12
+
13
+ #Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
14
+
@@ -0,0 +1,252 @@
1
+ require "tempfile"
2
+
3
+ module QuickMagick
4
+
5
+ class Image
6
+ class <<self
7
+
8
+ # create an array of images from the given blob data
9
+ def from_blob(blob, &proc)
10
+ file = Tempfile.new(QuickMagick::random_string)
11
+ file.write(blob)
12
+ file.close
13
+ self.read(file.path, &proc)
14
+ end
15
+
16
+ # create an array of images from the given file
17
+ def read(filename, &proc)
18
+ info = identify(%Q<"#{filename}">)
19
+ if info.empty?
20
+ raise QuickMagick::QuickMagickError, "Illegal file \"#{filename}\""
21
+ end
22
+ info_lines = info.split(/[\r\n]/)
23
+ images = []
24
+ if info_lines.size == 1
25
+ images << Image.new(filename, info_lines.first)
26
+ else
27
+ info_lines.each_with_index do |info_line, i|
28
+ images << Image.new("#{filename}[#{i.to_s}]", info_line)
29
+ end
30
+ end
31
+ images.collect!(&proc)
32
+ return images
33
+ end
34
+
35
+ alias open read
36
+
37
+ def gradient(width, height, type=QuickMagick::LinearGradient, color1=nil, color2=nil)
38
+ template_name = type + ":"
39
+ template_name << color1.to_s if color1
40
+ template_name << '-' << color2.to_s if color2
41
+ i = self.new(template_name, nil, true)
42
+ i.size = QuickMagick::Image::retrieve_geometry(width, height)
43
+ i
44
+ end
45
+
46
+ # Creates an image with solid color
47
+ def solid(width, height, color=nil)
48
+ template_name = QuickMagick::SolidColor+":"
49
+ template_name << color.to_s if color
50
+ i = self.new(template_name, nil, true)
51
+ i.size = QuickMagick::Image::retrieve_geometry(width, height)
52
+ i
53
+ end
54
+
55
+ # Creates an image from pattern
56
+ def pattern(width, height, pattern)
57
+ raise QuickMagick::QuickMagickError, "Invalid pattern '#{pattern.to_s}'" unless QuickMagick::Patterns.include?(pattern.to_s)
58
+ template_name = "pattern:#{pattern.to_s}"
59
+ i = self.new(template_name, nil, true)
60
+ i.size = QuickMagick::Image::retrieve_geometry(width, height)
61
+ i
62
+ end
63
+
64
+ # returns info for an image using <code>identify</code> command
65
+ def identify(filename)
66
+ `identify #{filename}`
67
+ end
68
+
69
+ def retrieve_geometry(width, height=nil, x=nil, y=nil, flag=nil)
70
+ geometry_string = ""
71
+ geometry_string << width.to_s if width
72
+ geometry_string << 'x' << height.to_s if height
73
+ geometry_string << '+' << x.to_s if x
74
+ geometry_string << '+' << y.to_s if y
75
+ geometry_string << flag if flag
76
+ geometry_string
77
+ end
78
+ end
79
+
80
+ # append the given option, value pair to the args for the current image
81
+ def append_to_operators(arg, value="")
82
+ @operators << %Q<-#{arg} #{value}>
83
+ end
84
+
85
+ # append the given option, value pair to the settings of the current image
86
+ def append_to_settings(arg, value="")
87
+ @settings << %Q<-#{arg} #{value}>
88
+ end
89
+
90
+ IMAGE_SETTINGS_METHODS = %w{
91
+ adjoin affine alpha antialias authenticate attenuate background bias black-point-compensation
92
+ blue-primary bordercolor caption channel colors colorspace comment compose compress define
93
+ delay depth display dispose dither encoding endian family fill filter font format fuzz gravity
94
+ green-primary intent interlace interpolate interword-spacing kerning label limit loop mask
95
+ mattecolor monitor orient ping pointsize preview quality quiet red-primary regard-warnings
96
+ remap respect-parentheses scene seed stretch stroke strokewidth style taint texture treedepth
97
+ transparent-color undercolor units verbose view virtual-pixel weight white-point
98
+
99
+ density page sampling-factor size tile-offset
100
+ }
101
+
102
+ IMAGE_OPERATORS_METHODS = %w{
103
+ alpha auto-orient bench black-threshold bordercolor charcoal clip clip-mask clip-path colorize
104
+ contrast convolve cycle decipher deskew despeckle distort draw edge encipher emboss enhance equalize
105
+ evaluate flip flop function gamma identify implode layers level level-colors median modulate monochrome
106
+ negate noise normalize opaque ordered-dither NxN paint polaroid posterize print profile quantize
107
+ radial-blur Raise random-threshold recolor render rotate segment sepia-tone set shade solarize
108
+ sparse-color spread strip swirl threshold tile tint transform transparent transpose transverse trim
109
+ type unique-colors white-threshold
110
+
111
+ adaptive-blur adaptive-resize adaptive-sharpen annotate blur border chop contrast-stretch extent
112
+ extract frame gaussian-blur geometry lat linear-stretch liquid-rescale motion-blur region repage
113
+ resample resize roll sample scale selective-blur shadow sharpen shave shear sigmoidal-contrast
114
+ sketch splice thumbnail unsharp vignette wave
115
+
116
+ append average clut coalesce combine composite deconstruct flatten fx hald-clut morph mosaic process reverse separate write
117
+ crop
118
+ }
119
+
120
+ def floodfill(width, height=nil, x=nil, y=nil, flag=nil, color=nil)
121
+ # TODO do a special method for floodfill
122
+ end
123
+
124
+ WITH_EQUAL_METHODS =
125
+ %w{alpha antialias background bias black-point-compensation blue-primary border bordercolor caption
126
+ cahnnel colors colorspace comment compose compress depth density encoding endian family fill filter
127
+ font format frame fuzz geometry gravity label mattecolor page pointsize quality undercolor units weight
128
+ brodercolor transparent type size}
129
+
130
+ WITH_GEOMETRY_METHODS =
131
+ %w{density page sampling-factor size tile-offset adaptive-blur adaptive-resize adaptive-sharpen
132
+ annotate blur border chop contrast-stretch extent extract floodfill frame gaussian-blur
133
+ geometry lat linear-stretch liquid-rescale motion-blur region repage resample resize roll
134
+ sample scale selective-blur shadow sharpen shave shear sigmoidal-contrast sketch
135
+ splice thumbnail unsharp vignette wave crop}
136
+
137
+ IMAGE_SETTINGS_METHODS.each do |method|
138
+ if WITH_EQUAL_METHODS.include?(method)
139
+ define_method((method+'=').to_sym) do |arg|
140
+ append_to_settings(method, %Q<"#{arg}"> )
141
+ end
142
+ elsif WITH_GEOMETRY_METHODS.include?(method)
143
+ define_method((method).to_sym) do |*args|
144
+ append_to_settings(method, %Q<"#{QuickMagick::Image.retrieve_geometry(*args) }"> )
145
+ end
146
+ else
147
+ define_method(method.to_sym) do |*args|
148
+ append_to_settings(method, args.collect{|arg| %Q<"#{arg}"> }.join(" "))
149
+ end
150
+ end
151
+ end
152
+
153
+ IMAGE_OPERATORS_METHODS.each do |method|
154
+ if WITH_EQUAL_METHODS.include?(method)
155
+ define_method((method+'=').to_sym) do |arg|
156
+ append_to_operators(method, %Q<"#{arg}"> )
157
+ end
158
+ elsif WITH_GEOMETRY_METHODS.include?(method)
159
+ define_method((method).to_sym) do |*args|
160
+ append_to_operators(method, %Q<"#{QuickMagick::Image.retrieve_geometry(*args) }"> )
161
+ end
162
+ else
163
+ define_method(method.to_sym) do |*args|
164
+ append_to_operators(method, args.collect{|arg| %Q<"#{arg}"> }.join(" "))
165
+ end
166
+ end
167
+ end
168
+
169
+ # define attribute readers (getters)
170
+ attr_reader :image_filename
171
+ alias original_filename image_filename
172
+
173
+ # constructor
174
+ def initialize(filename, info_line=nil, pseudo_image=false)
175
+ @image_filename = filename
176
+ @pseudo_image = pseudo_image
177
+ if info_line
178
+ @image_infoline = info_line.split
179
+ @image_infoline[0..1] = @image_infoline[0..1].join(' ') while !@image_infoline[0].start_with?(image_filename)
180
+ end
181
+ @operators = ""
182
+ @settings = ""
183
+ end
184
+
185
+ def command_line
186
+ %Q<#{@settings} "#{image_filename}" #{@operators}>
187
+ end
188
+
189
+ def image_infoline
190
+ unless @image_infoline
191
+ @image_infoline = QuickMagick::Image::identify(command_line).split
192
+ @image_infoline[0..1] = @image_infoline[0..1].join(' ') while !@image_infoline[0].start_with?(image_filename)
193
+ end
194
+ @image_infoline
195
+ end
196
+
197
+ # saves the current image to the given filename
198
+ def save(output_filename)
199
+ `convert #{command_line} "#{output_filename}"`
200
+ end
201
+
202
+ alias write save
203
+ alias convert save
204
+
205
+ # saves the current image overwriting the original image file
206
+ def save!
207
+ raise QuickMagick::QuickMagickError, "Cannot mogrify a pseudo image" if @pseudo_image
208
+ `mogrify #{command_line}`
209
+ end
210
+
211
+ alias write! save!
212
+ alias mogrify! save!
213
+
214
+ def format
215
+ image_infoline[1]
216
+ end
217
+
218
+ def columns
219
+ image_infoline[2].split('x').first.to_i
220
+ end
221
+
222
+ alias width columns
223
+
224
+ def rows
225
+ image_infoline[2].split('x').last.to_i
226
+ end
227
+
228
+ alias height rows
229
+
230
+ def bit_depth
231
+ image_infoline[4].to_i
232
+ end
233
+
234
+ def colors
235
+ image_infoline[6].to_i
236
+ end
237
+
238
+ def size
239
+ File.size?(image_filename)
240
+ end
241
+
242
+ # displays the current image as animated image
243
+ def animate
244
+ `animate #{command_line}`
245
+ end
246
+
247
+ # displays the current image to the x-windowing system
248
+ def display
249
+ `display #{command_line}`
250
+ end
251
+ end
252
+ end
@@ -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,32 @@
1
+ # check if ImageMagick is installed
2
+ status = `identify --version`
3
+ raise QuickMagick::QuickMagickError "ImageMagick not installed" if status.empty?
4
+
5
+ module QuickMagick
6
+ class QuickMagickError < RuntimeError; end
7
+ PercentGeometry = "%"
8
+ AspectGeometry = "!"
9
+ LessGeometry = "<"
10
+ GreaterGeometry = ">"
11
+ AreaGeometry = "@"
12
+ MinimumGeometry = "^"
13
+
14
+ SolidColor = "xc"
15
+ LinearGradient = "gradient"
16
+ RadialGradient = "radial-gradient"
17
+
18
+ Patterns = %w{bricks checkboard circles crosshatch crosshatch30 crosshatch45 fishscales} +
19
+ (0..20).collect {|level| "gray#{level}" } +
20
+ %w{hexagons horizontal horizontalsaw hs_bdiagonal hs_cross hs_diagcross hs_fdiagonal hs_horizontal
21
+ hs_vertical left30 left45 leftshingle octagons right30 right45 rightshingle smallfishscales
22
+ vertical verticalbricks verticalleftshingle verticalrightshingle verticalsaw}
23
+
24
+ # generate a random string of specified length
25
+ def self.random_string(length=10)
26
+ @@CHARS ||= ("a".."z").to_a + ("1".."9").to_a
27
+ Array.new(length, '').collect{@@CHARS[rand(@@CHARS.size)]}.join
28
+ end
29
+ end
30
+
31
+ require 'quick_magick/image'
32
+ require 'quick_magick/image_list'
@@ -0,0 +1,32 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{quick_magick}
5
+ s.version = "0.1.0"
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 = %q{2009-07-29}
10
+ s.description = %q{QuickMagick allows you to access ImageMagick command line functions using Ruby interface.}
11
+ s.email = %q{ahmed.eldawy@badrit.com}
12
+ s.extra_rdoc_files = ["README", "lib/quick_magick/image.rb", "lib/quick_magick/image_list.rb", "lib/quick_magick.rb"]
13
+ s.files = ["README", "Rakefile", "lib/quick_magick/image.rb", "lib/quick_magick/image_list.rb", "lib/quick_magick.rb", "Manifest", "quick_magick.gemspec", "test/image_test.rb", "test/logo-small.jpg", "test/badfile.xxx", "test/multipage.tif", "test/image_list_test.rb", "test/imagemagick-logo.png"]
14
+ s.has_rdoc = true
15
+ s.homepage = %q{http://quickmagick.rubyforge.org/}
16
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Quick_magick", "--main", "README"]
17
+ s.require_paths = ["lib"]
18
+ s.rubyforge_project = %q{quickmagick}
19
+ s.rubygems_version = %q{1.3.1}
20
+ s.summary = %q{QuickMagick allows you to access ImageMagick command line functions using Ruby interface.}
21
+ s.test_files = ["test/image_test.rb", "test/image_list_test.rb"]
22
+
23
+ if s.respond_to? :specification_version then
24
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
25
+ s.specification_version = 2
26
+
27
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
28
+ else
29
+ end
30
+ else
31
+ end
32
+ end
data/test/badfile.xxx ADDED
Binary file
@@ -0,0 +1,84 @@
1
+ require 'test/unit'
2
+ require 'quick_magick'
3
+ require 'ftools'
4
+
5
+ $base_dir = File.dirname(File.expand_path(__FILE__))
6
+
7
+ class ImageTest < Test::Unit::TestCase
8
+ def test_open_file
9
+ image_filename = File.join($base_dir, "imagemagick-logo.png")
10
+ i = QuickMagick::ImageList.new(image_filename)
11
+ assert_equal 1, i.length
12
+ end
13
+
14
+ def test_save_multipage
15
+ image_filename = File.join($base_dir, "imagemagick-logo.png")
16
+ image_filename2 = File.join($base_dir, "logo-small.jpg")
17
+ i = QuickMagick::ImageList.new(image_filename, image_filename2)
18
+ assert_equal 2, i.length
19
+ out_filename = File.join($base_dir, "out.tif")
20
+ i.save out_filename
21
+
22
+ i = QuickMagick::Image.read(out_filename)
23
+ assert_equal 2, i.length
24
+ assert_equal 100, i[1].width
25
+ ensure
26
+ File.delete(out_filename) if out_filename && File.exists?(out_filename)
27
+ end
28
+
29
+ def test_bulk_resize
30
+ image_filename1 = File.join($base_dir, "imagemagick-logo.png")
31
+ image_filename2 = File.join($base_dir, "logo-small.jpg")
32
+ i = QuickMagick::ImageList.new(image_filename1, image_filename2)
33
+ i.resize "50x50!"
34
+ out_filename = File.join($base_dir, "out.tif")
35
+ i.save out_filename
36
+
37
+ i = QuickMagick::Image.read(out_filename)
38
+ assert_equal 2, i.length
39
+ assert_equal 50, i[0].width
40
+ assert_equal 50, i[1].width
41
+ ensure
42
+ File.delete(out_filename) if out_filename && File.exists?(out_filename)
43
+ end
44
+
45
+ def test_append_image
46
+ image_filename1 = File.join($base_dir, "imagemagick-logo.png")
47
+ image_filename2 = File.join($base_dir, "logo-small.jpg")
48
+ i = QuickMagick::ImageList.new
49
+ i << QuickMagick::Image.read(image_filename1)
50
+ i << QuickMagick::Image.read(image_filename2)
51
+ i.resize "50x50!"
52
+ out_filename = File.join($base_dir, "out.tif")
53
+ i.save out_filename
54
+
55
+ i = QuickMagick::Image.read(out_filename)
56
+ assert_equal 2, i.length
57
+ assert_equal 50, i[0].width
58
+ assert_equal 50, i[1].width
59
+ ensure
60
+ File.delete(out_filename) if out_filename && File.exists?(out_filename)
61
+ end
62
+
63
+ def test_bulk_convert
64
+ image_filename1 = File.join($base_dir, "imagemagick-logo.png")
65
+ image_filename2 = File.join($base_dir, "logo-small.jpg")
66
+ new_image_filename1 = File.join($base_dir, "temp1.png")
67
+ new_image_filename2 = File.join($base_dir, "temp2.jpg")
68
+ File.copy(image_filename1, new_image_filename1)
69
+ File.copy(image_filename2, new_image_filename2)
70
+ i = QuickMagick::ImageList.new(new_image_filename1, new_image_filename2)
71
+ i.format = 'gif'
72
+ i.save!
73
+
74
+ out_filename1 = new_image_filename1.sub('.png', '.gif')
75
+ out_filename2 = new_image_filename2.sub('.jpg', '.gif')
76
+ assert File.exists?(out_filename1)
77
+ assert File.exists?(out_filename2)
78
+ ensure
79
+ File.delete(new_image_filename1) if new_image_filename1 && File.exists?(new_image_filename1)
80
+ File.delete(new_image_filename2) if new_image_filename2 && File.exists?(new_image_filename2)
81
+ File.delete(out_filename1) if out_filename1 && File.exists?(out_filename1)
82
+ File.delete(out_filename2) if out_filename2 && File.exists?(out_filename2)
83
+ end
84
+ end
@@ -0,0 +1,125 @@
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
+ def test_open_existing_image
8
+ image_filename = File.join($base_dir, "imagemagick-logo.png")
9
+ i = QuickMagick::Image.read(image_filename)
10
+ assert_equal 1, i.size
11
+ end
12
+
13
+ def test_create_from_blob
14
+ image_filename = File.join($base_dir, "imagemagick-logo.png")
15
+ blob = nil
16
+ File.open(image_filename, "rb") do |f|
17
+ blob = f.read
18
+ end
19
+ i = QuickMagick::Image.from_blob(blob)
20
+ assert_equal 1, i.size
21
+ end
22
+
23
+ def test_image_info
24
+ image_filename = File.join($base_dir, "imagemagick-logo.png")
25
+ i = QuickMagick::Image.read(image_filename).first
26
+ assert_equal 464, i.width
27
+ assert_equal 479, i.height
28
+ end
29
+
30
+ def test_open_non_existing_file
31
+ image_filename = File.join($base_dir, "space.png")
32
+ assert_raises QuickMagick::QuickMagickError do
33
+ i = QuickMagick::Image.read(image_filename)
34
+ end
35
+ end
36
+
37
+ def test_open_bad_file
38
+ image_filename = File.join($base_dir, "badfile.xxx")
39
+ assert_raises QuickMagick::QuickMagickError do
40
+ i = QuickMagick::Image.read(image_filename)
41
+ end
42
+ end
43
+
44
+ def test_open_mulitpage_file
45
+ image_filename = File.join($base_dir, "multipage.tif")
46
+ i = QuickMagick::Image.read(image_filename)
47
+ assert_equal 2, i.size
48
+ assert_equal 100, i[0].width
49
+ assert_equal 464, i[1].width
50
+ end
51
+
52
+ def test_resize_image
53
+ image_filename = File.join($base_dir, "imagemagick-logo.png")
54
+ i = QuickMagick::Image.read(image_filename).first
55
+ i.resize("300x300!")
56
+ out_filename = File.join($base_dir, "imagemagick-resized.png")
57
+ File.delete out_filename if File.exists?(out_filename)
58
+ i.save(out_filename)
59
+ assert File.exists?(out_filename)
60
+ i2 = QuickMagick::Image.read(out_filename).first
61
+ assert_equal 300, i2.width
62
+ assert_equal 300, i2.height
63
+ ensure
64
+ # clean up
65
+ File.delete(out_filename) if out_filename && File.exists?(out_filename)
66
+ end
67
+
68
+ def test_crop_image
69
+ image_filename = File.join($base_dir, "imagemagick-logo.png")
70
+ i = QuickMagick::Image.read(image_filename).first
71
+ i.crop("300x200+0+0")
72
+ out_filename = File.join($base_dir, "imagemagick-cropped.png")
73
+ File.delete out_filename if File.exists?(out_filename)
74
+ i.save(out_filename)
75
+ assert File.exists?(out_filename)
76
+ i2 = QuickMagick::Image.read(out_filename).first
77
+ assert_equal 300, i2.width
78
+ assert_equal 200, i2.height
79
+ ensure
80
+ # clean up
81
+ File.delete(out_filename) if out_filename && File.exists?(out_filename)
82
+ end
83
+
84
+ def test_resize_with_geometry_options
85
+ image_filename = File.join($base_dir, "imagemagick-logo.png")
86
+ i = QuickMagick::Image.read(image_filename).first
87
+ i.resize(300, 300, nil, nil, QuickMagick::AspectGeometry)
88
+ out_filename = File.join($base_dir, "imagemagick-resized.png")
89
+ File.delete out_filename if File.exists?(out_filename)
90
+ i.save(out_filename)
91
+ assert File.exists?(out_filename)
92
+ i2 = QuickMagick::Image.read(out_filename).first
93
+ assert_equal 300, i2.width
94
+ assert_equal 300, i2.height
95
+ ensure
96
+ # clean up
97
+ File.delete(out_filename) if out_filename && File.exists?(out_filename)
98
+ end
99
+
100
+ def test_resize_with_append_to_operators
101
+ image_filename = File.join($base_dir, "imagemagick-logo.png")
102
+ i = QuickMagick::Image.read(image_filename).first
103
+ i.append_to_operators 'resize', '300x300!'
104
+ out_filename = File.join($base_dir, "imagemagick-resized.png")
105
+ File.delete out_filename if File.exists?(out_filename)
106
+ i.save(out_filename)
107
+ assert File.exists?(out_filename)
108
+ i2 = QuickMagick::Image.read(out_filename).first
109
+ assert_equal 300, i2.width
110
+ assert_equal 300, i2.height
111
+ ensure
112
+ # clean up
113
+ File.delete(out_filename) if out_filename && File.exists?(out_filename)
114
+ end
115
+
116
+ def test_create_solid_image
117
+ i = QuickMagick::Image.solid(100, 100, :white)
118
+ assert_equal 100, i.width
119
+ end
120
+
121
+ def test_create_gradient_image
122
+ i = QuickMagick::Image.gradient(100, 100, QuickMagick::RadialGradient, :yellow, :blue)
123
+ assert_equal 100, i.width
124
+ end
125
+ end
Binary file
Binary file
Binary file
metadata ADDED
@@ -0,0 +1,74 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: quick_magick
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Ahmed ElDawy
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-07-29 00:00:00 +03:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: QuickMagick allows you to access ImageMagick command line functions using Ruby interface.
17
+ email: ahmed.eldawy@badrit.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README
24
+ - lib/quick_magick/image.rb
25
+ - lib/quick_magick/image_list.rb
26
+ - lib/quick_magick.rb
27
+ files:
28
+ - README
29
+ - Rakefile
30
+ - lib/quick_magick/image.rb
31
+ - lib/quick_magick/image_list.rb
32
+ - lib/quick_magick.rb
33
+ - Manifest
34
+ - quick_magick.gemspec
35
+ - test/image_test.rb
36
+ - test/logo-small.jpg
37
+ - test/badfile.xxx
38
+ - test/multipage.tif
39
+ - test/image_list_test.rb
40
+ - test/imagemagick-logo.png
41
+ has_rdoc: true
42
+ homepage: http://quickmagick.rubyforge.org/
43
+ post_install_message:
44
+ rdoc_options:
45
+ - --line-numbers
46
+ - --inline-source
47
+ - --title
48
+ - Quick_magick
49
+ - --main
50
+ - README
51
+ require_paths:
52
+ - lib
53
+ required_ruby_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: "0"
58
+ version:
59
+ required_rubygems_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: "1.2"
64
+ version:
65
+ requirements: []
66
+
67
+ rubyforge_project: quickmagick
68
+ rubygems_version: 1.3.1
69
+ signing_key:
70
+ specification_version: 2
71
+ summary: QuickMagick allows you to access ImageMagick command line functions using Ruby interface.
72
+ test_files:
73
+ - test/image_test.rb
74
+ - test/image_list_test.rb