mini_magick 1.2.5 → 1.3.2
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/README.rdoc +3 -2
- data/Rakefile +5 -41
- data/VERSION +1 -1
- data/lib/mini_gmagick.rb +2 -0
- data/lib/mini_magick.rb +80 -20
- data/test/actually_a_gif.jpg +0 -0
- data/test/animation.gif +0 -0
- data/test/command_builder_test.rb +2 -1
- data/test/image_test.rb +62 -18
- data/test/leaves.tiff +0 -0
- data/test/not_an_image.php +1 -604
- data/test/simple-minus.gif +0 -0
- metadata +61 -23
- data/.gitignore +0 -1
- data/lib/image_temp_file.rb +0 -9
- data/mini_magick.gemspec +0 -55
- data/test/image_temp_file_test.rb +0 -17
data/README.rdoc
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
= MiniMagick
|
|
2
2
|
|
|
3
|
-
A ruby wrapper for ImageMagick command line.
|
|
3
|
+
A ruby wrapper for ImageMagick or GraphicsMagick command line.
|
|
4
4
|
|
|
5
|
+
Tested on both Ruby 1.9.2 and Ruby 1.8.7.
|
|
5
6
|
|
|
6
7
|
== Why?
|
|
7
8
|
|
|
@@ -69,4 +70,4 @@ http://www.imagemagick.org/script/command-line-options.php#format
|
|
|
69
70
|
|
|
70
71
|
== Requirements
|
|
71
72
|
|
|
72
|
-
You must have ImageMagick installed.
|
|
73
|
+
You must have ImageMagick or GraphicsMagick installed.
|
data/Rakefile
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require 'rake'
|
|
2
2
|
require 'rake/testtask'
|
|
3
3
|
require 'rake/rdoctask'
|
|
4
|
+
require 'rake/gempackagetask'
|
|
4
5
|
|
|
5
6
|
$:.unshift(File.dirname(__FILE__) + "/lib")
|
|
6
7
|
require 'mini_magick'
|
|
@@ -10,7 +11,7 @@ task :default => :test
|
|
|
10
11
|
|
|
11
12
|
desc 'Test the mini_magick plugin.'
|
|
12
13
|
Rake::TestTask.new(:test) do |t|
|
|
13
|
-
t.libs << '
|
|
14
|
+
t.libs << 'test'
|
|
14
15
|
t.pattern = 'test/**/*_test.rb'
|
|
15
16
|
t.verbose = true
|
|
16
17
|
end
|
|
@@ -25,44 +26,7 @@ Rake::RDocTask.new(:rdoc) do |rdoc|
|
|
|
25
26
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
26
27
|
end
|
|
27
28
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
require 'jeweler'
|
|
32
|
-
Jeweler::Tasks.new do |gemspec|
|
|
33
|
-
gemspec.name = "mini_magick"
|
|
34
|
-
gemspec.summary = "Manipulate images with minimal use of memory."
|
|
35
|
-
gemspec.email = "probablycorey@gmail.com"
|
|
36
|
-
gemspec.homepage = "http://github.com/probablycorey/mini_magick"
|
|
37
|
-
gemspec.authors = ["Corey Johnson"]
|
|
38
|
-
gemspec.rubyforge_project = "mini-magick"
|
|
39
|
-
end
|
|
40
|
-
rescue LoadError
|
|
41
|
-
puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
begin
|
|
45
|
-
require 'rake/contrib/sshpublisher'
|
|
46
|
-
namespace :rubyforge do
|
|
47
|
-
|
|
48
|
-
desc "Release gem and RDoc documentation to RubyForge"
|
|
49
|
-
task :release => ["rubyforge:release:gem", "rubyforge:release:docs"]
|
|
50
|
-
|
|
51
|
-
namespace :release do
|
|
52
|
-
desc "Publish RDoc to RubyForge."
|
|
53
|
-
task :docs => [:rdoc] do
|
|
54
|
-
config = YAML.load(
|
|
55
|
-
File.read(File.expand_path('~/.rubyforge/user-config.yml'))
|
|
56
|
-
)
|
|
57
|
-
|
|
58
|
-
host = "#{config['username']}@rubyforge.org"
|
|
59
|
-
remote_dir = "/var/www/gforge-projects/the-perfect-gem/"
|
|
60
|
-
local_dir = 'rdoc'
|
|
61
|
-
|
|
62
|
-
Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
rescue LoadError
|
|
67
|
-
puts "Rake SshDirPublisher is unavailable or your rubyforge environment is not configured."
|
|
29
|
+
spec = eval(File.read('mini_magick.gemspec'))
|
|
30
|
+
Rake::GemPackageTask.new(spec) do |pkg|
|
|
31
|
+
pkg.gem_spec = spec
|
|
68
32
|
end
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.2
|
|
1
|
+
1.3.2
|
data/lib/mini_gmagick.rb
ADDED
data/lib/mini_magick.rb
CHANGED
|
@@ -1,12 +1,22 @@
|
|
|
1
|
-
require
|
|
2
|
-
require "stringio"
|
|
3
|
-
require "fileutils"
|
|
4
|
-
require "open3"
|
|
5
|
-
|
|
6
|
-
require File.join(File.dirname(__FILE__), '/image_temp_file')
|
|
1
|
+
require 'tempfile'
|
|
7
2
|
|
|
8
3
|
module MiniMagick
|
|
9
|
-
class
|
|
4
|
+
class << self
|
|
5
|
+
attr_accessor :processor
|
|
6
|
+
attr_accessor :use_subexec
|
|
7
|
+
attr_accessor :timeout
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
MOGRIFY_COMMANDS = %w{adaptive-blur adaptive-resize adaptive-sharpen adjoin affine alpha annotate antialias append authenticate auto-gamma auto-level auto-orient background bench iterations bias black-threshold blue-primary point blue-shift factor blur border bordercolor brightness-contrast caption string cdl filename channel type charcoal radius chop clip clamp clip-mask filename clip-path id clone index clut contrast-stretch coalesce colorize color-matrix colors colorspace type combine comment string compose operator composite compress type contrast convolve coefficients crop cycle amount decipher filename debug events define format:option deconstruct delay delete index density depth despeckle direction type display server dispose method distort type coefficients dither method draw string edge radius emboss radius encipher filename encoding type endian type enhance equalize evaluate operator evaluate-sequence operator extent extract family name fft fill filter type flatten flip floodfill flop font name format string frame function name fuzz distance fx expression gamma gaussian-blur geometry gravity type green-primary point help identify ifft implode amount insert index intent type interlace type interline-spacing interpolate method interword-spacing kerning label string lat layers method level limit type linear-stretch liquid-rescale log format loop iterations mask filename mattecolor median radius modulate monitor monochrome morph morphology method kernel motion-blur negate noise radius normalize opaque ordered-dither NxN orient type page paint radius ping pointsize polaroid angle posterize levels precision preview type print string process image-filter profile filename quality quantizespace quiet radial-blur angle raise random-threshold low,high red-primary point regard-warnings region remap filename render repage resample resize respect-parentheses roll rotate degrees sample sampling-factor scale scene seed segments selective-blur separate sepia-tone threshold set attribute shade degrees shadow sharpen shave shear sigmoidal-contrast size sketch solarize threshold splice spread radius strip stroke strokewidth stretch type style type swap indexes swirl degrees texture filename threshold thumbnail tile filename tile-offset tint transform transparent transparent-color transpose transverse treedepth trim type type undercolor unique-colors units type unsharp verbose version view vignette virtual-pixel method wave weight type white-point point white-threshold write filename}
|
|
11
|
+
|
|
12
|
+
# Subexec only works with 1.9
|
|
13
|
+
if RUBY_VERSION[0..2].to_f < 1.8
|
|
14
|
+
self.use_subexec = true
|
|
15
|
+
require 'subexec'
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
class Error < RuntimeError; end
|
|
19
|
+
class Invalid < StandardError; end
|
|
10
20
|
|
|
11
21
|
class Image
|
|
12
22
|
attr :path
|
|
@@ -18,7 +28,7 @@ module MiniMagick
|
|
|
18
28
|
class << self
|
|
19
29
|
def from_blob(blob, ext = nil)
|
|
20
30
|
begin
|
|
21
|
-
tempfile =
|
|
31
|
+
tempfile = Tempfile.new(['mini_magick', ext.to_s])
|
|
22
32
|
tempfile.binmode
|
|
23
33
|
tempfile.write(blob)
|
|
24
34
|
ensure
|
|
@@ -65,7 +75,12 @@ module MiniMagick
|
|
|
65
75
|
# Get the EXIF original capture as a Time object
|
|
66
76
|
Time.local(*self["EXIF:DateTimeOriginal"].split(/:|\s+/)) rescue nil
|
|
67
77
|
when /^EXIF\:/i
|
|
68
|
-
run_command('identify', '-format', "\"%[#{value}]\"", @path).chop
|
|
78
|
+
result = run_command('identify', '-format', "\"%[#{value}]\"", @path).chop
|
|
79
|
+
if result.include?(",")
|
|
80
|
+
read_character_data(result)
|
|
81
|
+
else
|
|
82
|
+
result
|
|
83
|
+
end
|
|
69
84
|
else
|
|
70
85
|
run_command('identify', '-format', "\"#{value}\"", @path).split("\n")[0]
|
|
71
86
|
end
|
|
@@ -84,14 +99,14 @@ module MiniMagick
|
|
|
84
99
|
run_command("mogrify", "-format", format, @path)
|
|
85
100
|
|
|
86
101
|
old_path = @path.dup
|
|
87
|
-
@path.sub!(/(\.\w
|
|
102
|
+
@path.sub!(/(\.\w*)?$/, ".#{format}")
|
|
88
103
|
File.delete(old_path) unless old_path == @path
|
|
89
104
|
|
|
90
105
|
unless File.exists?(@path)
|
|
91
106
|
begin
|
|
92
107
|
FileUtils.copy_file(@path.sub(".#{format}", "-#{page}.#{format}"), @path)
|
|
93
|
-
rescue
|
|
94
|
-
raise MiniMagickError, "Unable to format to #{format}; #{
|
|
108
|
+
rescue => ex
|
|
109
|
+
raise MiniMagickError, "Unable to format to #{format}; #{ex}" unless File.exist?(@path)
|
|
95
110
|
end
|
|
96
111
|
end
|
|
97
112
|
ensure
|
|
@@ -99,6 +114,12 @@ module MiniMagick
|
|
|
99
114
|
File.unlink(fname)
|
|
100
115
|
end
|
|
101
116
|
end
|
|
117
|
+
|
|
118
|
+
# Collapse images with sequences to the first frame (ie. animated gifs) and
|
|
119
|
+
# preserve quality
|
|
120
|
+
def collapse!
|
|
121
|
+
run_command("mogrify", "-quality", "100", "#{path}[0]")
|
|
122
|
+
end
|
|
102
123
|
|
|
103
124
|
# Writes the temporary image that we are using for processing to the output path
|
|
104
125
|
def write(output_path)
|
|
@@ -118,9 +139,13 @@ module MiniMagick
|
|
|
118
139
|
# If an unknown method is called then it is sent through the morgrify program
|
|
119
140
|
# Look here to find all the commands (http://www.imagemagick.org/script/mogrify.php)
|
|
120
141
|
def method_missing(symbol, *args)
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
142
|
+
if MOGRIFY_COMMANDS.include?(symbol.to_s)
|
|
143
|
+
args.push(@path) # push the path onto the end
|
|
144
|
+
run_command("mogrify", "-#{symbol}", *args)
|
|
145
|
+
self
|
|
146
|
+
else
|
|
147
|
+
super(symbol, *args)
|
|
148
|
+
end
|
|
124
149
|
end
|
|
125
150
|
|
|
126
151
|
# You can use multiple commands together using this method
|
|
@@ -143,22 +168,57 @@ module MiniMagick
|
|
|
143
168
|
def run_command(command, *args)
|
|
144
169
|
args.collect! do |arg|
|
|
145
170
|
# args can contain characters like '>' so we must escape them, but don't quote switches
|
|
146
|
-
if arg !~
|
|
171
|
+
if arg !~ /^[\+\-]/
|
|
147
172
|
"\"#{arg}\""
|
|
148
173
|
else
|
|
149
174
|
arg.to_s
|
|
150
175
|
end
|
|
151
176
|
end
|
|
152
177
|
|
|
153
|
-
command = "#{command} #{args.join(' ')}"
|
|
154
|
-
output = `#{command} 2>&1`
|
|
178
|
+
command = "#{MiniMagick.processor} #{command} #{args.join(' ')}".strip
|
|
155
179
|
|
|
156
|
-
if
|
|
157
|
-
|
|
180
|
+
if ::MiniMagick.use_subexec
|
|
181
|
+
sub = Subexec.run(command, :timeout => MiniMagick.timeout)
|
|
182
|
+
exit_status = sub.exitstatus
|
|
183
|
+
output = sub.output
|
|
184
|
+
else
|
|
185
|
+
output = `#{command} 2>&1`
|
|
186
|
+
exit_status = $?.exitstatus
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
if exit_status != 0
|
|
190
|
+
# Clean up after ourselves in case of an error
|
|
191
|
+
destroy!
|
|
192
|
+
|
|
193
|
+
# Raise the appropriate error
|
|
194
|
+
if output =~ /no decode delegate/i || output =~ /did not return an image/i
|
|
195
|
+
raise Invalid, output
|
|
196
|
+
else
|
|
197
|
+
# TODO: should we do something different if the command times out ...?
|
|
198
|
+
# its definitely better for logging.. otherwise we dont really know
|
|
199
|
+
raise Error, "Command (#{command.inspect}) failed: #{{:status_code => exit_status, :output => output}.inspect}"
|
|
200
|
+
end
|
|
158
201
|
else
|
|
159
202
|
output
|
|
160
203
|
end
|
|
161
204
|
end
|
|
205
|
+
|
|
206
|
+
def destroy!
|
|
207
|
+
return if tempfile.nil?
|
|
208
|
+
File.unlink(tempfile.path)
|
|
209
|
+
@tempfile = nil
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
private
|
|
213
|
+
# Sometimes we get back a list of character values
|
|
214
|
+
def read_character_data(list_of_characters)
|
|
215
|
+
chars = list_of_characters.gsub(" ", "").split(",")
|
|
216
|
+
result = ""
|
|
217
|
+
chars.each do |val|
|
|
218
|
+
result << ("%c" % val.to_i)
|
|
219
|
+
end
|
|
220
|
+
result
|
|
221
|
+
end
|
|
162
222
|
end
|
|
163
223
|
|
|
164
224
|
class CommandBuilder
|
data/test/actually_a_gif.jpg
CHANGED
|
Binary file
|
data/test/animation.gif
CHANGED
|
Binary file
|
data/test/image_test.rb
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
require 'rubygems'
|
|
1
2
|
require 'test/unit'
|
|
2
|
-
require File.
|
|
3
|
+
require File.expand_path('../../lib/mini_magick', __FILE__)
|
|
4
|
+
|
|
5
|
+
#MiniMagick.processor = :gm
|
|
3
6
|
|
|
4
7
|
class ImageTest < Test::Unit::TestCase
|
|
5
8
|
include MiniMagick
|
|
@@ -7,6 +10,7 @@ class ImageTest < Test::Unit::TestCase
|
|
|
7
10
|
CURRENT_DIR = File.dirname(File.expand_path(__FILE__)) + "/"
|
|
8
11
|
|
|
9
12
|
SIMPLE_IMAGE_PATH = CURRENT_DIR + "simple.gif"
|
|
13
|
+
MINUS_IMAGE_PATH = CURRENT_DIR + "simple-minus.gif"
|
|
10
14
|
TIFF_IMAGE_PATH = CURRENT_DIR + "leaves.tiff"
|
|
11
15
|
NOT_AN_IMAGE_PATH = CURRENT_DIR + "not_an_image.php"
|
|
12
16
|
GIF_WITH_JPG_EXT = CURRENT_DIR + "actually_a_gif.jpg"
|
|
@@ -16,15 +20,18 @@ class ImageTest < Test::Unit::TestCase
|
|
|
16
20
|
def test_image_from_blob
|
|
17
21
|
File.open(SIMPLE_IMAGE_PATH, "rb") do |f|
|
|
18
22
|
image = Image.from_blob(f.read)
|
|
23
|
+
image.destroy!
|
|
19
24
|
end
|
|
20
25
|
end
|
|
21
26
|
|
|
22
27
|
def test_image_from_file
|
|
23
28
|
image = Image.from_file(SIMPLE_IMAGE_PATH)
|
|
29
|
+
image.destroy!
|
|
24
30
|
end
|
|
25
31
|
|
|
26
32
|
def test_image_new
|
|
27
33
|
image = Image.new(SIMPLE_IMAGE_PATH)
|
|
34
|
+
image.destroy!
|
|
28
35
|
end
|
|
29
36
|
|
|
30
37
|
def test_image_write
|
|
@@ -37,11 +44,13 @@ class ImageTest < Test::Unit::TestCase
|
|
|
37
44
|
ensure
|
|
38
45
|
File.delete output_path
|
|
39
46
|
end
|
|
47
|
+
image.destroy!
|
|
40
48
|
end
|
|
41
49
|
|
|
42
50
|
def test_not_an_image
|
|
43
|
-
assert_raise(
|
|
51
|
+
assert_raise(MiniMagick::Invalid) do
|
|
44
52
|
image = Image.new(NOT_AN_IMAGE_PATH)
|
|
53
|
+
image.destroy!
|
|
45
54
|
end
|
|
46
55
|
end
|
|
47
56
|
|
|
@@ -51,29 +60,34 @@ class ImageTest < Test::Unit::TestCase
|
|
|
51
60
|
assert_equal 55, image[:height]
|
|
52
61
|
assert_equal [150, 55], image[:dimensions]
|
|
53
62
|
assert_match(/^gif$/i, image[:format])
|
|
63
|
+
image.destroy!
|
|
54
64
|
end
|
|
55
65
|
|
|
56
66
|
def test_tiff
|
|
57
67
|
image = Image.new(TIFF_IMAGE_PATH)
|
|
58
68
|
assert_equal "tiff", image[:format].downcase
|
|
59
|
-
assert_equal
|
|
60
|
-
assert_equal
|
|
69
|
+
assert_equal 50, image[:width]
|
|
70
|
+
assert_equal 41, image[:height]
|
|
71
|
+
image.destroy!
|
|
61
72
|
end
|
|
62
73
|
|
|
63
|
-
def test_animation_pages
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
74
|
+
# def test_animation_pages
|
|
75
|
+
# image = Image.from_file(ANIMATION_PATH)
|
|
76
|
+
# image.format "png", 0
|
|
77
|
+
# assert_equal "png", image[:format].downcase
|
|
78
|
+
# image.destroy!
|
|
79
|
+
# end
|
|
68
80
|
|
|
69
|
-
def test_animation_size
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
81
|
+
# def test_animation_size
|
|
82
|
+
# image = Image.from_file(ANIMATION_PATH)
|
|
83
|
+
# assert_equal image[:size], 76631
|
|
84
|
+
# image.destroy!
|
|
85
|
+
# end
|
|
73
86
|
|
|
74
87
|
def test_gif_with_jpg_format
|
|
75
88
|
image = Image.new(GIF_WITH_JPG_EXT)
|
|
76
89
|
assert_equal "gif", image[:format].downcase
|
|
90
|
+
image.destroy!
|
|
77
91
|
end
|
|
78
92
|
|
|
79
93
|
def test_image_resize
|
|
@@ -83,6 +97,7 @@ class ImageTest < Test::Unit::TestCase
|
|
|
83
97
|
assert_equal 20, image[:width]
|
|
84
98
|
assert_equal 30, image[:height]
|
|
85
99
|
assert_match(/^gif$/i, image[:format])
|
|
100
|
+
image.destroy!
|
|
86
101
|
end
|
|
87
102
|
|
|
88
103
|
def test_image_resize_with_minimum
|
|
@@ -92,6 +107,7 @@ class ImageTest < Test::Unit::TestCase
|
|
|
92
107
|
|
|
93
108
|
assert_equal original_width, image[:width]
|
|
94
109
|
assert_equal original_height, image[:height]
|
|
110
|
+
image.destroy!
|
|
95
111
|
end
|
|
96
112
|
|
|
97
113
|
def test_image_combine_options_resize_blur
|
|
@@ -104,6 +120,17 @@ class ImageTest < Test::Unit::TestCase
|
|
|
104
120
|
assert_equal 20, image[:width]
|
|
105
121
|
assert_equal 30, image[:height]
|
|
106
122
|
assert_match(/^gif$/i, image[:format])
|
|
123
|
+
image.destroy!
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def test_image_combine_options_with_filename_with_minusses_in_it
|
|
127
|
+
image = Image.from_file(SIMPLE_IMAGE_PATH)
|
|
128
|
+
assert_nothing_raised do
|
|
129
|
+
image.combine_options do |c|
|
|
130
|
+
c.draw "image Over 0,0 10,10 '#{MINUS_IMAGE_PATH}'"
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
image.destroy!
|
|
107
134
|
end
|
|
108
135
|
|
|
109
136
|
def test_exif
|
|
@@ -111,6 +138,7 @@ class ImageTest < Test::Unit::TestCase
|
|
|
111
138
|
assert_equal('0220', image["exif:ExifVersion"])
|
|
112
139
|
image = Image.from_file(SIMPLE_IMAGE_PATH)
|
|
113
140
|
assert_equal('', image["EXIF:ExifVersion"])
|
|
141
|
+
image.destroy!
|
|
114
142
|
end
|
|
115
143
|
|
|
116
144
|
def test_original_at
|
|
@@ -118,17 +146,20 @@ class ImageTest < Test::Unit::TestCase
|
|
|
118
146
|
assert_equal(Time.local('2005', '2', '23', '23', '17', '24'), image[:original_at])
|
|
119
147
|
image = Image.from_file(SIMPLE_IMAGE_PATH)
|
|
120
148
|
assert_nil(image[:original_at])
|
|
149
|
+
image.destroy!
|
|
121
150
|
end
|
|
122
151
|
|
|
123
152
|
def test_tempfile_at_path
|
|
124
153
|
image = Image.from_file(TIFF_IMAGE_PATH)
|
|
125
154
|
assert_equal image.path, image.tempfile.path
|
|
155
|
+
image.destroy!
|
|
126
156
|
end
|
|
127
157
|
|
|
128
158
|
def test_tempfile_at_path_after_format
|
|
129
159
|
image = Image.from_file(TIFF_IMAGE_PATH)
|
|
130
160
|
image.format('png')
|
|
131
161
|
assert_equal image.path, image.tempfile.path
|
|
162
|
+
image.destroy!
|
|
132
163
|
end
|
|
133
164
|
|
|
134
165
|
def test_previous_tempfile_deleted_after_format
|
|
@@ -136,12 +167,25 @@ class ImageTest < Test::Unit::TestCase
|
|
|
136
167
|
before = image.path.dup
|
|
137
168
|
image.format('png')
|
|
138
169
|
assert !File.exist?(before)
|
|
170
|
+
image.destroy!
|
|
139
171
|
end
|
|
140
|
-
|
|
141
|
-
def
|
|
142
|
-
image = Image.from_file(
|
|
143
|
-
|
|
144
|
-
image.
|
|
172
|
+
|
|
173
|
+
def test_bad_method_bug
|
|
174
|
+
image = Image.from_file(TIFF_IMAGE_PATH)
|
|
175
|
+
begin
|
|
176
|
+
image.to_blog
|
|
177
|
+
rescue NoMethodError
|
|
178
|
+
assert true
|
|
145
179
|
end
|
|
180
|
+
image.to_blob
|
|
181
|
+
assert true #we made it this far without error
|
|
182
|
+
image.destroy!
|
|
146
183
|
end
|
|
184
|
+
|
|
185
|
+
# def test_mini_magick_error_when_referencing_not_existing_page
|
|
186
|
+
# image = Image.from_file(ANIMATION_PATH)
|
|
187
|
+
# image.format('png')
|
|
188
|
+
# assert_equal image[:format], 'PNG'
|
|
189
|
+
# image.destroy!
|
|
190
|
+
# end
|
|
147
191
|
end
|
data/test/leaves.tiff
CHANGED
|
Binary file
|
data/test/not_an_image.php
CHANGED
|
@@ -1,604 +1 @@
|
|
|
1
|
-
|
|
2
|
-
<html dir="ltr"><head>
|
|
3
|
-
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>TextDrive Community Forum / Lighttpd says Insufficient memory (case 4)</title>
|
|
4
|
-
|
|
5
|
-
<link rel="stylesheet" type="text/css" href="not_an_image_files/Oxygen.css">
|
|
6
|
-
<script type="text/javascript">
|
|
7
|
-
<!--
|
|
8
|
-
function process_form(the_form)
|
|
9
|
-
{
|
|
10
|
-
var element_names = new Object()
|
|
11
|
-
element_names["req_message"] = "Message"
|
|
12
|
-
|
|
13
|
-
if (document.all || document.getElementById)
|
|
14
|
-
{
|
|
15
|
-
for (i = 0; i < the_form.length; ++i)
|
|
16
|
-
{
|
|
17
|
-
var elem = the_form.elements[i]
|
|
18
|
-
if (elem.name && elem.name.substring(0, 4) == "req_")
|
|
19
|
-
{
|
|
20
|
-
if (elem.type && (elem.type=="text" || elem.type=="textarea" || elem.type=="password" || elem.type=="file") && elem.value=='')
|
|
21
|
-
{
|
|
22
|
-
alert("\"" + element_names[elem.name] + "\" is a required field in this form.")
|
|
23
|
-
elem.focus()
|
|
24
|
-
return false
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
return true
|
|
31
|
-
}
|
|
32
|
-
// -->
|
|
33
|
-
</script>
|
|
34
|
-
<style type="text/css">
|
|
35
|
-
|
|
36
|
-
body
|
|
37
|
-
{
|
|
38
|
-
margin: 0px;
|
|
39
|
-
padding: 0px;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
#header
|
|
43
|
-
{
|
|
44
|
-
margin: 0;
|
|
45
|
-
padding: 0;
|
|
46
|
-
height: 100px;
|
|
47
|
-
text-align: left;
|
|
48
|
-
background-color: #003;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
#navlinks
|
|
52
|
-
{
|
|
53
|
-
font: 10px Verdana, Arial, Helvetica, sans-serif;
|
|
54
|
-
color: #333333;
|
|
55
|
-
padding: 10px;
|
|
56
|
-
|
|
57
|
-
}
|
|
58
|
-
</style></head>
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
<body>
|
|
62
|
-
<div id="header"><a href="http://textdrive.com/"><img src="not_an_image_files/textdrive_head.gif" style="border: 0pt none ;" alt="TextDrive" height="100" width="600"></a></div>
|
|
63
|
-
<div id="punwrap">
|
|
64
|
-
<div id="punviewtopic" class="pun">
|
|
65
|
-
|
|
66
|
-
<div id="brdheader" class="block">
|
|
67
|
-
<div class="box">
|
|
68
|
-
<div id="brdmenui" class="inbox">
|
|
69
|
-
<ul>
|
|
70
|
-
<li id="navindex"><a href="http://forum.textdrive.com/index.php">Index</a></li>
|
|
71
|
-
<li id="navuserlist"><a href="http://forum.textdrive.com/userlist.php">User list</a></li>
|
|
72
|
-
<li id="navsearch"><a href="http://forum.textdrive.com/search.php">Search</a></li>
|
|
73
|
-
<li id="navprofile"><a href="http://forum.textdrive.com/profile.php?id=1067">Profile</a></li>
|
|
74
|
-
<li id="navlogout"><a href="http://forum.textdrive.com/login.php?action=out&id=1067">Logout</a></li>
|
|
75
|
-
</ul>
|
|
76
|
-
</div>
|
|
77
|
-
<div id="brdwelcome" class="inbox">
|
|
78
|
-
<ul class="conl">
|
|
79
|
-
<li>Logged in as <strong>geography</strong></li>
|
|
80
|
-
<li>Last visit: Today 21:29:23</li>
|
|
81
|
-
</ul>
|
|
82
|
-
<div class="clearer"></div>
|
|
83
|
-
</div>
|
|
84
|
-
</div>
|
|
85
|
-
</div>
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
<div class="linkst">
|
|
90
|
-
<div class="inbox">
|
|
91
|
-
<p class="pagelink conl">Pages: <strong>1</strong></p>
|
|
92
|
-
<p class="postlink conr"><a href="http://forum.textdrive.com/post.php?tid=7356">Post reply</a></p>
|
|
93
|
-
<ul><li><a href="http://forum.textdrive.com/index.php">Index</a></li><li> » <a href="http://forum.textdrive.com/viewforum.php?id=4">Troubleshooting</a></li><li> » Lighttpd says Insufficient memory (case 4)</li></ul>
|
|
94
|
-
<div class="clearer"></div>
|
|
95
|
-
</div>
|
|
96
|
-
</div>
|
|
97
|
-
|
|
98
|
-
<div id="p62698" class="blockpost rowodd firstpost">
|
|
99
|
-
<h2><span><span class="conr">#1 </span><a href="http://forum.textdrive.com/viewtopic.php?pid=62698#p62698">Yesterday 20:47:30</a></span></h2>
|
|
100
|
-
<div class="box">
|
|
101
|
-
<div class="inbox">
|
|
102
|
-
<div class="postleft">
|
|
103
|
-
<dl>
|
|
104
|
-
<dt><strong><a href="http://forum.textdrive.com/profile.php?id=1067">geography</a></strong></dt>
|
|
105
|
-
<dd class="usertitle"><strong>Member</strong></dd>
|
|
106
|
-
<dd class="postavatar"></dd>
|
|
107
|
-
<dd>From: NYC</dd>
|
|
108
|
-
<dd>Registered: 2005-03-17</dd>
|
|
109
|
-
<dd>Posts: 10</dd>
|
|
110
|
-
<dd class="usercontacts"><a href="http://forum.textdrive.com/misc.php?email=1067">E-mail</a> <a href="http://journal.gleepglop.com/">Website</a></dd>
|
|
111
|
-
</dl>
|
|
112
|
-
</div>
|
|
113
|
-
<div class="postright">
|
|
114
|
-
<h3>Lighttpd says Insufficient memory (case 4)</h3>
|
|
115
|
-
<div class="postmsg">
|
|
116
|
-
<p>I
|
|
117
|
-
have a rails app that downloads images found on the web. I'm running it
|
|
118
|
-
through lighttpd and everything works fine unless it is a large image
|
|
119
|
-
(Like over 500k).</p>
|
|
120
|
-
|
|
121
|
-
<p>Then lighttpd throughs this error:</p>
|
|
122
|
-
Insufficient memory (case 4)
|
|
123
|
-
|
|
124
|
-
<p>Has anyone else encountered this? What exactly could be the root of this error?</p>
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
</div>
|
|
129
|
-
</div>
|
|
130
|
-
<div class="clearer"></div>
|
|
131
|
-
<div class="postfootleft"><p><strong>Online</strong></p></div>
|
|
132
|
-
<div class="postfootright"><ul><li class="postreport"><a href="http://forum.textdrive.com/misc.php?report=62698">Report</a> | </li><li class="postedit"><a href="http://forum.textdrive.com/edit.php?id=62698">Edit</a> | </li><li class="postquote"><a href="http://forum.textdrive.com/post.php?tid=7356&qid=62698">Quote</a></li></ul></div>
|
|
133
|
-
</div>
|
|
134
|
-
</div>
|
|
135
|
-
</div>
|
|
136
|
-
|
|
137
|
-
<div id="p62708" class="blockpost roweven">
|
|
138
|
-
<h2><span><span class="conr">#2 </span><a href="http://forum.textdrive.com/viewtopic.php?pid=62708#p62708">Yesterday 22:06:50</a></span></h2>
|
|
139
|
-
<div class="box">
|
|
140
|
-
<div class="inbox">
|
|
141
|
-
<div class="postleft">
|
|
142
|
-
<dl>
|
|
143
|
-
<dt><strong><a href="http://forum.textdrive.com/profile.php?id=2707">jqshenker</a></strong></dt>
|
|
144
|
-
<dd class="usertitle"><strong>Member</strong></dd>
|
|
145
|
-
<dd class="postavatar"><img src="not_an_image_files/2707.jfif" alt="" height="60" width="60"></dd>
|
|
146
|
-
<dd>From: Palo Alto, CA</dd>
|
|
147
|
-
<dd>Registered: 2005-09-06</dd>
|
|
148
|
-
<dd>Posts: 422</dd>
|
|
149
|
-
<dd class="usercontacts"><a href="http://forum.textdrive.com/misc.php?email=2707">E-mail</a> <a href="http://nothingmuch.textdriven.com/">Website</a></dd>
|
|
150
|
-
</dl>
|
|
151
|
-
</div>
|
|
152
|
-
<div class="postright">
|
|
153
|
-
<h3> Re: Lighttpd says Insufficient memory (case 4)</h3>
|
|
154
|
-
<div class="postmsg">
|
|
155
|
-
<p>Yeah,
|
|
156
|
-
it's the limits. Are you downloading it, or resizing it as well?
|
|
157
|
-
Downloading usually isn't the problem, it's the resizing that breaks.</p>
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
</div>
|
|
162
|
-
<div class="postsignature"><hr><a href="http://soggyslides.textdriven.com/">soggyslides - {abstractisms daily}</a></div>
|
|
163
|
-
</div>
|
|
164
|
-
<div class="clearer"></div>
|
|
165
|
-
<div class="postfootleft"><p>Offline</p></div>
|
|
166
|
-
<div class="postfootright"><ul><li class="postreport"><a href="http://forum.textdrive.com/misc.php?report=62708">Report</a> | </li><li class="postquote"><a href="http://forum.textdrive.com/post.php?tid=7356&qid=62708">Quote</a></li></ul></div>
|
|
167
|
-
</div>
|
|
168
|
-
</div>
|
|
169
|
-
</div>
|
|
170
|
-
|
|
171
|
-
<div id="p62709" class="blockpost rowodd">
|
|
172
|
-
<h2><span><span class="conr">#3 </span><a href="http://forum.textdrive.com/viewtopic.php?pid=62709#p62709">Yesterday 22:12:28</a></span></h2>
|
|
173
|
-
<div class="box">
|
|
174
|
-
<div class="inbox">
|
|
175
|
-
<div class="postleft">
|
|
176
|
-
<dl>
|
|
177
|
-
<dt><strong><a href="http://forum.textdrive.com/profile.php?id=1045">julik</a></strong></dt>
|
|
178
|
-
<dd class="usertitle"><strong>Member</strong></dd>
|
|
179
|
-
<dd class="postavatar"><img src="not_an_image_files/1045.png" alt="" height="60" width="57"></dd>
|
|
180
|
-
<dd>From: Utrecht, Netherlands</dd>
|
|
181
|
-
<dd>Registered: 2005-03-12</dd>
|
|
182
|
-
<dd>Posts: 137</dd>
|
|
183
|
-
<dd class="usercontacts"><a href="http://forum.textdrive.com/misc.php?email=1045">E-mail</a> <a href="http://live.julik.nl/">Website</a></dd>
|
|
184
|
-
</dl>
|
|
185
|
-
</div>
|
|
186
|
-
<div class="postright">
|
|
187
|
-
<h3> Re: Lighttpd says Insufficient memory (case 4)</h3>
|
|
188
|
-
<div class="postmsg">
|
|
189
|
-
<p>that doesn't feel well</p>
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
</div>
|
|
194
|
-
</div>
|
|
195
|
-
<div class="clearer"></div>
|
|
196
|
-
<div class="postfootleft"><p><strong>Online</strong></p></div>
|
|
197
|
-
<div class="postfootright"><ul><li class="postreport"><a href="http://forum.textdrive.com/misc.php?report=62709">Report</a> | </li><li class="postquote"><a href="http://forum.textdrive.com/post.php?tid=7356&qid=62709">Quote</a></li></ul></div>
|
|
198
|
-
</div>
|
|
199
|
-
</div>
|
|
200
|
-
</div>
|
|
201
|
-
|
|
202
|
-
<div id="p62732" class="blockpost roweven">
|
|
203
|
-
<h2><span><span class="conr">#4 </span><a href="http://forum.textdrive.com/viewtopic.php?pid=62732#p62732">Today 03:46:42</a></span></h2>
|
|
204
|
-
<div class="box">
|
|
205
|
-
<div class="inbox">
|
|
206
|
-
<div class="postleft">
|
|
207
|
-
<dl>
|
|
208
|
-
<dt><strong><a href="http://forum.textdrive.com/profile.php?id=1067">geography</a></strong></dt>
|
|
209
|
-
<dd class="usertitle"><strong>Member</strong></dd>
|
|
210
|
-
<dd class="postavatar"></dd>
|
|
211
|
-
<dd>From: NYC</dd>
|
|
212
|
-
<dd>Registered: 2005-03-17</dd>
|
|
213
|
-
<dd>Posts: 10</dd>
|
|
214
|
-
<dd class="usercontacts"><a href="http://forum.textdrive.com/misc.php?email=1067">E-mail</a> <a href="http://journal.gleepglop.com/">Website</a></dd>
|
|
215
|
-
</dl>
|
|
216
|
-
</div>
|
|
217
|
-
<div class="postright">
|
|
218
|
-
<h3> Re: Lighttpd says Insufficient memory (case 4)</h3>
|
|
219
|
-
<div class="postmsg">
|
|
220
|
-
<p>I'm resizing it too. But that is not where it dies.<br>
|
|
221
|
-
It dies right before I write it to disk (With Magick::Image.write from RMagick)</p>
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
</div>
|
|
226
|
-
</div>
|
|
227
|
-
<div class="clearer"></div>
|
|
228
|
-
<div class="postfootleft"><p><strong>Online</strong></p></div>
|
|
229
|
-
<div class="postfootright"><ul><li class="postreport"><a href="http://forum.textdrive.com/misc.php?report=62732">Report</a> | </li><li class="postdelete"><a href="http://forum.textdrive.com/delete.php?id=62732">Delete</a> | </li><li class="postedit"><a href="http://forum.textdrive.com/edit.php?id=62732">Edit</a> | </li><li class="postquote"><a href="http://forum.textdrive.com/post.php?tid=7356&qid=62732">Quote</a></li></ul></div>
|
|
230
|
-
</div>
|
|
231
|
-
</div>
|
|
232
|
-
</div>
|
|
233
|
-
|
|
234
|
-
<div id="p62735" class="blockpost rowodd">
|
|
235
|
-
<h2><span><span class="conr">#5 </span><a href="http://forum.textdrive.com/viewtopic.php?pid=62735#p62735">Today 04:14:08</a></span></h2>
|
|
236
|
-
<div class="box">
|
|
237
|
-
<div class="inbox">
|
|
238
|
-
<div class="postleft">
|
|
239
|
-
<dl>
|
|
240
|
-
<dt><strong><a href="http://forum.textdrive.com/profile.php?id=2707">jqshenker</a></strong></dt>
|
|
241
|
-
<dd class="usertitle"><strong>Member</strong></dd>
|
|
242
|
-
<dd class="postavatar"><img src="not_an_image_files/2707.jfif" alt="" height="60" width="60"></dd>
|
|
243
|
-
<dd>From: Palo Alto, CA</dd>
|
|
244
|
-
<dd>Registered: 2005-09-06</dd>
|
|
245
|
-
<dd>Posts: 422</dd>
|
|
246
|
-
<dd class="usercontacts"><a href="http://forum.textdrive.com/misc.php?email=2707">E-mail</a> <a href="http://nothingmuch.textdriven.com/">Website</a></dd>
|
|
247
|
-
</dl>
|
|
248
|
-
</div>
|
|
249
|
-
<div class="postright">
|
|
250
|
-
<h3> Re: Lighttpd says Insufficient memory (case 4)</h3>
|
|
251
|
-
<div class="postmsg">
|
|
252
|
-
<p></p><blockquote><div class="incqbox"><h4>geography wrote:</h4><p>I'm resizing it too. But that is not where it dies.<br>
|
|
253
|
-
It dies right before I write it to disk (With Magick::Image.write from RMagick)</p></div></blockquote><p><br>
|
|
254
|
-
I meant "resizing" as anything to do with RMagick. There've been a
|
|
255
|
-
couple threads on this, search around. Resizing you image before upload
|
|
256
|
-
or not using RMagick and instead using ImageMagick via the commandline
|
|
257
|
-
might or might not work.... basically you can't do much, unfortunately.</p>
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
</div>
|
|
262
|
-
<div class="postsignature"><hr><a href="http://soggyslides.textdriven.com/">soggyslides - {abstractisms daily}</a></div>
|
|
263
|
-
</div>
|
|
264
|
-
<div class="clearer"></div>
|
|
265
|
-
<div class="postfootleft"><p>Offline</p></div>
|
|
266
|
-
<div class="postfootright"><ul><li class="postreport"><a href="http://forum.textdrive.com/misc.php?report=62735">Report</a> | </li><li class="postquote"><a href="http://forum.textdrive.com/post.php?tid=7356&qid=62735">Quote</a></li></ul></div>
|
|
267
|
-
</div>
|
|
268
|
-
</div>
|
|
269
|
-
</div>
|
|
270
|
-
|
|
271
|
-
<div id="p62737" class="blockpost roweven">
|
|
272
|
-
<h2><span><span class="conr">#6 </span><a href="http://forum.textdrive.com/viewtopic.php?pid=62737#p62737">Today 04:17:28</a></span></h2>
|
|
273
|
-
<div class="box">
|
|
274
|
-
<div class="inbox">
|
|
275
|
-
<div class="postleft">
|
|
276
|
-
<dl>
|
|
277
|
-
<dt><strong><a href="http://forum.textdrive.com/profile.php?id=1097">cch</a></strong></dt>
|
|
278
|
-
<dd class="usertitle"><strong>Member</strong></dd>
|
|
279
|
-
<dd class="postavatar"></dd>
|
|
280
|
-
<dd>Registered: 2005-03-21</dd>
|
|
281
|
-
<dd>Posts: 108</dd>
|
|
282
|
-
<dd class="usercontacts"><a href="http://forum.textdrive.com/misc.php?email=1097">E-mail</a></dd>
|
|
283
|
-
</dl>
|
|
284
|
-
</div>
|
|
285
|
-
<div class="postright">
|
|
286
|
-
<h3> Re: Lighttpd says Insufficient memory (case 4)</h3>
|
|
287
|
-
<div class="postmsg">
|
|
288
|
-
<p>what if you use open(fname, 'w'){|f|f.write img.to_blob} ?</p>
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
</div>
|
|
293
|
-
</div>
|
|
294
|
-
<div class="clearer"></div>
|
|
295
|
-
<div class="postfootleft"><p>Offline</p></div>
|
|
296
|
-
<div class="postfootright"><ul><li class="postreport"><a href="http://forum.textdrive.com/misc.php?report=62737">Report</a> | </li><li class="postquote"><a href="http://forum.textdrive.com/post.php?tid=7356&qid=62737">Quote</a></li></ul></div>
|
|
297
|
-
</div>
|
|
298
|
-
</div>
|
|
299
|
-
</div>
|
|
300
|
-
|
|
301
|
-
<div id="p62767" class="blockpost rowodd">
|
|
302
|
-
<h2><span><span class="conr">#7 </span><a href="http://forum.textdrive.com/viewtopic.php?pid=62767#p62767">Today 15:44:42</a></span></h2>
|
|
303
|
-
<div class="box">
|
|
304
|
-
<div class="inbox">
|
|
305
|
-
<div class="postleft">
|
|
306
|
-
<dl>
|
|
307
|
-
<dt><strong><a href="http://forum.textdrive.com/profile.php?id=1067">geography</a></strong></dt>
|
|
308
|
-
<dd class="usertitle"><strong>Member</strong></dd>
|
|
309
|
-
<dd class="postavatar"></dd>
|
|
310
|
-
<dd>From: NYC</dd>
|
|
311
|
-
<dd>Registered: 2005-03-17</dd>
|
|
312
|
-
<dd>Posts: 10</dd>
|
|
313
|
-
<dd class="usercontacts"><a href="http://forum.textdrive.com/misc.php?email=1067">E-mail</a> <a href="http://journal.gleepglop.com/">Website</a></dd>
|
|
314
|
-
</dl>
|
|
315
|
-
</div>
|
|
316
|
-
<div class="postright">
|
|
317
|
-
<h3> Re: Lighttpd says Insufficient memory (case 4)</h3>
|
|
318
|
-
<div class="postmsg">
|
|
319
|
-
<p>Using
|
|
320
|
-
open(fname, 'w'){|f|f.write img.to_blob} has the same problem... I
|
|
321
|
-
guess I'll try and run it from the command line but that seems like a
|
|
322
|
-
drastic step. Why is the memory so limited, shouldn't the server be
|
|
323
|
-
able to save 500k files, or does imageMagick have a very high overhead?</p>
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
</div>
|
|
328
|
-
</div>
|
|
329
|
-
<div class="clearer"></div>
|
|
330
|
-
<div class="postfootleft"><p><strong>Online</strong></p></div>
|
|
331
|
-
<div class="postfootright"><ul><li class="postreport"><a href="http://forum.textdrive.com/misc.php?report=62767">Report</a> | </li><li class="postdelete"><a href="http://forum.textdrive.com/delete.php?id=62767">Delete</a> | </li><li class="postedit"><a href="http://forum.textdrive.com/edit.php?id=62767">Edit</a> | </li><li class="postquote"><a href="http://forum.textdrive.com/post.php?tid=7356&qid=62767">Quote</a></li></ul></div>
|
|
332
|
-
</div>
|
|
333
|
-
</div>
|
|
334
|
-
</div>
|
|
335
|
-
|
|
336
|
-
<div id="p62774" class="blockpost roweven">
|
|
337
|
-
<h2><span><span class="conr">#8 </span><a href="http://forum.textdrive.com/viewtopic.php?pid=62774#p62774">Today 17:03:28</a></span></h2>
|
|
338
|
-
<div class="box">
|
|
339
|
-
<div class="inbox">
|
|
340
|
-
<div class="postleft">
|
|
341
|
-
<dl>
|
|
342
|
-
<dt><strong><a href="http://forum.textdrive.com/profile.php?id=2707">jqshenker</a></strong></dt>
|
|
343
|
-
<dd class="usertitle"><strong>Member</strong></dd>
|
|
344
|
-
<dd class="postavatar"><img src="not_an_image_files/2707.jfif" alt="" height="60" width="60"></dd>
|
|
345
|
-
<dd>From: Palo Alto, CA</dd>
|
|
346
|
-
<dd>Registered: 2005-09-06</dd>
|
|
347
|
-
<dd>Posts: 422</dd>
|
|
348
|
-
<dd class="usercontacts"><a href="http://forum.textdrive.com/misc.php?email=2707">E-mail</a> <a href="http://nothingmuch.textdriven.com/">Website</a></dd>
|
|
349
|
-
</dl>
|
|
350
|
-
</div>
|
|
351
|
-
<div class="postright">
|
|
352
|
-
<h3> Re: Lighttpd says Insufficient memory (case 4)</h3>
|
|
353
|
-
<div class="postmsg">
|
|
354
|
-
<p>RMagick
|
|
355
|
-
does leak memory in some versions (there's a patched version of
|
|
356
|
-
file_column which resizes via the commandline), but I'm not sure why
|
|
357
|
-
you can't resize larger images. It doesn't take <strong>that</strong> much memory.</p>
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
</div>
|
|
362
|
-
<div class="postsignature"><hr><a href="http://soggyslides.textdriven.com/">soggyslides - {abstractisms daily}</a></div>
|
|
363
|
-
</div>
|
|
364
|
-
<div class="clearer"></div>
|
|
365
|
-
<div class="postfootleft"><p>Offline</p></div>
|
|
366
|
-
<div class="postfootright"><ul><li class="postreport"><a href="http://forum.textdrive.com/misc.php?report=62774">Report</a> | </li><li class="postquote"><a href="http://forum.textdrive.com/post.php?tid=7356&qid=62774">Quote</a></li></ul></div>
|
|
367
|
-
</div>
|
|
368
|
-
</div>
|
|
369
|
-
</div>
|
|
370
|
-
|
|
371
|
-
<div id="p62782" class="blockpost rowodd">
|
|
372
|
-
<h2><span><span class="conr">#9 </span><a href="http://forum.textdrive.com/viewtopic.php?pid=62782#p62782">Today 19:04:21</a></span></h2>
|
|
373
|
-
<div class="box">
|
|
374
|
-
<div class="inbox">
|
|
375
|
-
<div class="postleft">
|
|
376
|
-
<dl>
|
|
377
|
-
<dt><strong><a href="http://forum.textdrive.com/profile.php?id=1067">geography</a></strong></dt>
|
|
378
|
-
<dd class="usertitle"><strong>Member</strong></dd>
|
|
379
|
-
<dd class="postavatar"></dd>
|
|
380
|
-
<dd>From: NYC</dd>
|
|
381
|
-
<dd>Registered: 2005-03-17</dd>
|
|
382
|
-
<dd>Posts: 10</dd>
|
|
383
|
-
<dd class="usercontacts"><a href="http://forum.textdrive.com/misc.php?email=1067">E-mail</a> <a href="http://journal.gleepglop.com/">Website</a></dd>
|
|
384
|
-
</dl>
|
|
385
|
-
</div>
|
|
386
|
-
<div class="postright">
|
|
387
|
-
<h3> Re: Lighttpd says Insufficient memory (case 4)</h3>
|
|
388
|
-
<div class="postmsg">
|
|
389
|
-
<p>So what i've learned so far...</p>
|
|
390
|
-
|
|
391
|
-
<p>TextDrive has a memory limit.<br>
|
|
392
|
-
-When using RMagick in a rails app running with fcgi and lighttpd this memory limit is exceeded.<br>
|
|
393
|
-
-When the memory limit is exceeded the fcgi process is killed (No expcetions caught or anything in Ruby... the process ends)<br>
|
|
394
|
-
-The problem occurs when writing images to disk (With either File.open or Image.write)<br>
|
|
395
|
-
-The problem still occurs if I call GC.starts after RMagick calls</p>
|
|
396
|
-
|
|
397
|
-
<p>Here is what I don't get...<br>
|
|
398
|
-
-Why is the memory limit so low (Or why does a simple RMagick call take
|
|
399
|
-
up so much memory? My dispatch procs take up around 50 megs, I can't
|
|
400
|
-
imagine that opening a 600k file would come close to using that much
|
|
401
|
-
memory)<br>
|
|
402
|
-
-Would putting my RMagick code in a different thread allow me to have more memory at my disposal?</p>
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
</div>
|
|
407
|
-
</div>
|
|
408
|
-
<div class="clearer"></div>
|
|
409
|
-
<div class="postfootleft"><p><strong>Online</strong></p></div>
|
|
410
|
-
<div class="postfootright"><ul><li class="postreport"><a href="http://forum.textdrive.com/misc.php?report=62782">Report</a> | </li><li class="postdelete"><a href="http://forum.textdrive.com/delete.php?id=62782">Delete</a> | </li><li class="postedit"><a href="http://forum.textdrive.com/edit.php?id=62782">Edit</a> | </li><li class="postquote"><a href="http://forum.textdrive.com/post.php?tid=7356&qid=62782">Quote</a></li></ul></div>
|
|
411
|
-
</div>
|
|
412
|
-
</div>
|
|
413
|
-
</div>
|
|
414
|
-
|
|
415
|
-
<div id="p62785" class="blockpost roweven">
|
|
416
|
-
<h2><span><span class="conr">#10 </span><a href="http://forum.textdrive.com/viewtopic.php?pid=62785#p62785">Today 19:29:11</a></span></h2>
|
|
417
|
-
<div class="box">
|
|
418
|
-
<div class="inbox">
|
|
419
|
-
<div class="postleft">
|
|
420
|
-
<dl>
|
|
421
|
-
<dt><strong><a href="http://forum.textdrive.com/profile.php?id=1097">cch</a></strong></dt>
|
|
422
|
-
<dd class="usertitle"><strong>Member</strong></dd>
|
|
423
|
-
<dd class="postavatar"></dd>
|
|
424
|
-
<dd>Registered: 2005-03-21</dd>
|
|
425
|
-
<dd>Posts: 108</dd>
|
|
426
|
-
<dd class="usercontacts"><a href="http://forum.textdrive.com/misc.php?email=1097">E-mail</a></dd>
|
|
427
|
-
</dl>
|
|
428
|
-
</div>
|
|
429
|
-
<div class="postright">
|
|
430
|
-
<h3> Re: Lighttpd says Insufficient memory (case 4)</h3>
|
|
431
|
-
<div class="postmsg">
|
|
432
|
-
<p>the memory limit is 100mb.</p>
|
|
433
|
-
|
|
434
|
-
<p>watch
|
|
435
|
-
your process as you make the upload to see how high it goes. also try
|
|
436
|
-
resizing an image using a standalone (no rails) ruby script and see how
|
|
437
|
-
much memory it uses this way.</p>
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
</div>
|
|
442
|
-
</div>
|
|
443
|
-
<div class="clearer"></div>
|
|
444
|
-
<div class="postfootleft"><p>Offline</p></div>
|
|
445
|
-
<div class="postfootright"><ul><li class="postreport"><a href="http://forum.textdrive.com/misc.php?report=62785">Report</a> | </li><li class="postquote"><a href="http://forum.textdrive.com/post.php?tid=7356&qid=62785">Quote</a></li></ul></div>
|
|
446
|
-
</div>
|
|
447
|
-
</div>
|
|
448
|
-
</div>
|
|
449
|
-
|
|
450
|
-
<div id="p62796" class="blockpost rowodd">
|
|
451
|
-
<h2><span><span class="conr">#11 </span><a href="http://forum.textdrive.com/viewtopic.php?pid=62796#p62796">Today 21:13:19</a></span></h2>
|
|
452
|
-
<div class="box">
|
|
453
|
-
<div class="inbox">
|
|
454
|
-
<div class="postleft">
|
|
455
|
-
<dl>
|
|
456
|
-
<dt><strong><a href="http://forum.textdrive.com/profile.php?id=1067">geography</a></strong></dt>
|
|
457
|
-
<dd class="usertitle"><strong>Member</strong></dd>
|
|
458
|
-
<dd class="postavatar"></dd>
|
|
459
|
-
<dd>From: NYC</dd>
|
|
460
|
-
<dd>Registered: 2005-03-17</dd>
|
|
461
|
-
<dd>Posts: 10</dd>
|
|
462
|
-
<dd class="usercontacts"><a href="http://forum.textdrive.com/misc.php?email=1067">E-mail</a> <a href="http://journal.gleepglop.com/">Website</a></dd>
|
|
463
|
-
</dl>
|
|
464
|
-
</div>
|
|
465
|
-
<div class="postright">
|
|
466
|
-
<h3> Re: Lighttpd says Insufficient memory (case 4)</h3>
|
|
467
|
-
<div class="postmsg">
|
|
468
|
-
<p>So after some investigation it seems like RMagick is a total memory hog.</p>
|
|
469
|
-
|
|
470
|
-
<p>I load a 750k image with this tiny standalone ruby program...</p>
|
|
471
|
-
|
|
472
|
-
<p>image = nil<br>
|
|
473
|
-
open(filepath) do |f|</p>
|
|
474
|
-
image = Magick::Image.from_blob(f.read).first<br>
|
|
475
|
-
end<br>
|
|
476
|
-
image.write("image.jpg")
|
|
477
|
-
|
|
478
|
-
<p>Monitoring the mem usage (using top) I get this 8th column is mem usuage</p>
|
|
479
|
-
<p>#File being downloaded<br>
|
|
480
|
-
7198 ruby 7.6% 0:04.83 2 15 60 3.37M+ 2.65M 4.88M+ 44.5M+<br>
|
|
481
|
-
7198 ruby 14.4% 0:05.01 2 15 68 18.1M+ 2.73M+ 20.0M+ 80.9M+<br>
|
|
482
|
-
7198 ruby 35.0% 0:05.49 2 15 67 41.8M+ 2.73M 43.7M+ 80.8M-</p>
|
|
483
|
-
<p>#File being loading into Magick::Image<br>
|
|
484
|
-
7198 ruby 0.1% 0:05.49 2 15 67 41.8M 2.73M 43.7M 80.8M-<br>
|
|
485
|
-
7198 ruby 0.1% 0:05.49 2 15 67 41.8M 2.73M 43.7M 80.8M-</p>
|
|
486
|
-
<p>#File being written to disk<br>
|
|
487
|
-
7198 ruby 3.4% 0:05.53 2 15 72 43.4M+ 2.73M 45.3M+ 122M+<br>
|
|
488
|
-
7198 ruby 55.9% 0:06.29 2 15 72 61.1M+ 2.73M 63.0M+ 122M <br>
|
|
489
|
-
7198 ruby 48.4% 0:06.93 2 15 72 76.1M+ 2.73M 78.1M+ 122M <br>
|
|
490
|
-
7198 ruby 48.2% 0:07.55 2 15 67 42.5M- 2.73M 44.4M- 80.8M-</p>
|
|
491
|
-
|
|
492
|
-
<p>So
|
|
493
|
-
I guess the moral is RMagick eats up a ton of memory. I can't really
|
|
494
|
-
see anyway around this problem though, maybe using the command line
|
|
495
|
-
would eat up less memory (which is what I'll try next)</p>
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
<p class="postedit"><em>Last edited by geography (Today 21:29:17)</em></p>
|
|
500
|
-
</div>
|
|
501
|
-
</div>
|
|
502
|
-
<div class="clearer"></div>
|
|
503
|
-
<div class="postfootleft"><p><strong>Online</strong></p></div>
|
|
504
|
-
<div class="postfootright"><ul><li class="postreport"><a href="http://forum.textdrive.com/misc.php?report=62796">Report</a> | </li><li class="postdelete"><a href="http://forum.textdrive.com/delete.php?id=62796">Delete</a> | </li><li class="postedit"><a href="http://forum.textdrive.com/edit.php?id=62796">Edit</a> | </li><li class="postquote"><a href="http://forum.textdrive.com/post.php?tid=7356&qid=62796">Quote</a></li></ul></div>
|
|
505
|
-
</div>
|
|
506
|
-
</div>
|
|
507
|
-
</div>
|
|
508
|
-
|
|
509
|
-
<div id="p62801" class="blockpost roweven">
|
|
510
|
-
<h2><span><span class="conr">#12 </span><a href="http://forum.textdrive.com/viewtopic.php?pid=62801#p62801">Today 21:55:36</a></span></h2>
|
|
511
|
-
<div class="box">
|
|
512
|
-
<div class="inbox">
|
|
513
|
-
<div class="postleft">
|
|
514
|
-
<dl>
|
|
515
|
-
<dt><strong><a href="http://forum.textdrive.com/profile.php?id=1097">cch</a></strong></dt>
|
|
516
|
-
<dd class="usertitle"><strong>Member</strong></dd>
|
|
517
|
-
<dd class="postavatar"></dd>
|
|
518
|
-
<dd>Registered: 2005-03-21</dd>
|
|
519
|
-
<dd>Posts: 108</dd>
|
|
520
|
-
<dd class="usercontacts"><a href="http://forum.textdrive.com/misc.php?email=1097">E-mail</a></dd>
|
|
521
|
-
</dl>
|
|
522
|
-
</div>
|
|
523
|
-
<div class="postright">
|
|
524
|
-
<h3> Re: Lighttpd says Insufficient memory (case 4)</h3>
|
|
525
|
-
<div class="postmsg">
|
|
526
|
-
<p>Yea, now you have to know whether it's RMagick specifically, or ImageMagick itself that is a memory hog.</p>
|
|
527
|
-
|
|
528
|
-
<p>I
|
|
529
|
-
suppose it goes memory hungry because it expands a full uncompressed
|
|
530
|
-
24bit bitmap to memory, and that's innevitably large. (entirely
|
|
531
|
-
uninformed hunch)</p>
|
|
532
|
-
|
|
533
|
-
<p>There's ruby-GD as an alternative, but it
|
|
534
|
-
doesn't look nearly as nice, and I've never used it, and I don't know
|
|
535
|
-
if it'd be more or less of a hog.</p>
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
<p class="postedit"><em>Last edited by cch (Today 21:56:17)</em></p>
|
|
540
|
-
</div>
|
|
541
|
-
</div>
|
|
542
|
-
<div class="clearer"></div>
|
|
543
|
-
<div class="postfootleft"><p>Offline</p></div>
|
|
544
|
-
<div class="postfootright"><ul><li class="postreport"><a href="http://forum.textdrive.com/misc.php?report=62801">Report</a> | </li><li class="postquote"><a href="http://forum.textdrive.com/post.php?tid=7356&qid=62801">Quote</a></li></ul></div>
|
|
545
|
-
</div>
|
|
546
|
-
</div>
|
|
547
|
-
</div>
|
|
548
|
-
|
|
549
|
-
<div class="postlinksb">
|
|
550
|
-
<div class="inbox">
|
|
551
|
-
<p class="postlink conr"><a href="http://forum.textdrive.com/post.php?tid=7356">Post reply</a></p>
|
|
552
|
-
<p class="pagelink conl">Pages: <strong>1</strong></p>
|
|
553
|
-
<ul><li><a href="http://forum.textdrive.com/index.php">Index</a></li><li> » <a href="http://forum.textdrive.com/viewforum.php?id=4">Troubleshooting</a></li><li> » Lighttpd says Insufficient memory (case 4)</li></ul>
|
|
554
|
-
<p class="subscribelink clearb">You are currently subscribed to this topic - <a href="http://forum.textdrive.com/misc.php?unsubscribe=7356">Unsubscribe</a></p>
|
|
555
|
-
</div>
|
|
556
|
-
</div>
|
|
557
|
-
|
|
558
|
-
<div class="blockform">
|
|
559
|
-
<h2><span>Quick post</span></h2>
|
|
560
|
-
<div class="box">
|
|
561
|
-
<form method="post" action="post.php?tid=7356" onsubmit="this.submit.disabled=true;if(process_form(this)){return true;}else{this.submit.disabled=false;return false;}">
|
|
562
|
-
<div class="inform">
|
|
563
|
-
<fieldset>
|
|
564
|
-
<legend>Write your message and submit <span style="color: red; text-decoration: underline;">keeping in mind that this is not an official support forum.</span></legend>
|
|
565
|
-
<div class="infldset txtarea">
|
|
566
|
-
<input name="form_sent" value="1" type="hidden">
|
|
567
|
-
<input name="form_user" value="geography" type="hidden">
|
|
568
|
-
<label><textarea name="req_message" rows="7" cols="75" tabindex="1"></textarea></label>
|
|
569
|
-
<ul class="bblinks">
|
|
570
|
-
<li><a href="http://forum.textdrive.com/help.php#bbcode" onclick="window.open(this.href); return false;">BBCode</a>: on</li>
|
|
571
|
-
<li><a href="http://forum.textdrive.com/help.php#img" onclick="window.open(this.href); return false;">[img] tag</a>: on</li>
|
|
572
|
-
<li><a href="http://forum.textdrive.com/help.php#smilies" onclick="window.open(this.href); return false;">Smilies</a>: off</li>
|
|
573
|
-
</ul>
|
|
574
|
-
</div>
|
|
575
|
-
</fieldset>
|
|
576
|
-
</div>
|
|
577
|
-
<p><input name="submit" tabindex="2" value="Submit" accesskey="s" type="submit"></p>
|
|
578
|
-
</form>
|
|
579
|
-
</div>
|
|
580
|
-
</div>
|
|
581
|
-
|
|
582
|
-
<div id="brdfooter" class="block">
|
|
583
|
-
<h2><span>Board footer</span></h2>
|
|
584
|
-
<div class="box">
|
|
585
|
-
<div class="inbox">
|
|
586
|
-
|
|
587
|
-
<div class="conl">
|
|
588
|
-
<form id="qjump" method="get" action="viewforum.php">
|
|
589
|
-
<div><label>Jump to
|
|
590
|
-
<br><select name="id" onchange="window.location=('viewforum.php?id='+this.options[this.selectedIndex].value)"><optgroup label="TextDrive Hosting"><option value="2">Announcements</option><option value="33">Questions and Stuff</option><option value="11">Why Host With TXD?</option><option value="1">Getting Started</option><option value="3">How Do I...?</option><option value="4" selected="selected">Troubleshooting</option><option value="15">SPAM and Security</option><option value="5">Coding in General</option><option value="16">Localhostin'</option><option value="31">Look What I Did Dammit</option><option value="6">TextDrivel</option><option value="8">Archives</option><option value="32">Designing yourself into a corner</option></optgroup><optgroup label="TextDrive Internationale"><option value="23">TextDrive En Español</option><option value="24">TextDrive en Français</option></optgroup><optgroup label="Applications (and their developers) on TextDrive"><option value="7">Textpattern</option><option value="9">RubyOnRails</option><option value="10">Instiki</option><option value="12">Photostack</option><option value="13">PunBB</option><option value="14">WordPress</option><option value="17">Epilog</option><option value="20">sIFR</option><option value="22">Subversion</option><option value="26">Lightpress</option><option value="27">Loudblog</option><option value="25">Strongspace</option><option value="29">RailsAppHosting</option><option value="35">Anemone</option><option value="28">Django</option><option value="30">TurboGears</option><option value="34">Templation</option></optgroup></select>
|
|
591
|
-
<input value=" Go " accesskey="g" type="submit">
|
|
592
|
-
</label></div>
|
|
593
|
-
</form>
|
|
594
|
-
</div>
|
|
595
|
-
<p class="conr">Powered by <a href="http://www.punbb.org/">PunBB</a><br>© Copyright 2002–2005 Rickard Andersson</p>
|
|
596
|
-
<div class="clearer"></div>
|
|
597
|
-
</div>
|
|
598
|
-
</div>
|
|
599
|
-
</div>
|
|
600
|
-
|
|
601
|
-
</div>
|
|
602
|
-
</div>
|
|
603
|
-
|
|
604
|
-
</body></html>
|
|
1
|
+
<?php I am so not an image ?>
|
|
Binary file
|
metadata
CHANGED
|
@@ -1,71 +1,109 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: mini_magick
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
|
|
4
|
+
hash: 31
|
|
5
|
+
prerelease: false
|
|
6
|
+
segments:
|
|
7
|
+
- 1
|
|
8
|
+
- 3
|
|
9
|
+
- 2
|
|
10
|
+
version: 1.3.2
|
|
5
11
|
platform: ruby
|
|
6
12
|
authors:
|
|
7
13
|
- Corey Johnson
|
|
14
|
+
- Peter Kieltyka
|
|
15
|
+
- Hampton Catlin
|
|
8
16
|
autorequire:
|
|
9
17
|
bindir: bin
|
|
10
18
|
cert_chain: []
|
|
11
19
|
|
|
12
|
-
date:
|
|
20
|
+
date: 2010-08-02 00:00:00 -07:00
|
|
13
21
|
default_executable:
|
|
14
|
-
dependencies:
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
22
|
+
dependencies:
|
|
23
|
+
- !ruby/object:Gem::Dependency
|
|
24
|
+
name: subexec
|
|
25
|
+
prerelease: false
|
|
26
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
|
27
|
+
none: false
|
|
28
|
+
requirements:
|
|
29
|
+
- - ~>
|
|
30
|
+
- !ruby/object:Gem::Version
|
|
31
|
+
hash: 23
|
|
32
|
+
segments:
|
|
33
|
+
- 0
|
|
34
|
+
- 0
|
|
35
|
+
- 4
|
|
36
|
+
version: 0.0.4
|
|
37
|
+
type: :runtime
|
|
38
|
+
version_requirements: *id001
|
|
39
|
+
description: ""
|
|
40
|
+
email:
|
|
41
|
+
- probablycorey@gmail.com
|
|
42
|
+
- peter@nulayer.com
|
|
43
|
+
- hcatlin@gmail.com
|
|
18
44
|
executables: []
|
|
19
45
|
|
|
20
46
|
extensions: []
|
|
21
47
|
|
|
22
|
-
extra_rdoc_files:
|
|
23
|
-
|
|
48
|
+
extra_rdoc_files: []
|
|
49
|
+
|
|
24
50
|
files:
|
|
25
|
-
- .gitignore
|
|
26
|
-
- MIT-LICENSE
|
|
27
51
|
- README.rdoc
|
|
28
|
-
- Rakefile
|
|
29
52
|
- VERSION
|
|
30
|
-
-
|
|
53
|
+
- MIT-LICENSE
|
|
54
|
+
- Rakefile
|
|
55
|
+
- lib/mini_gmagick.rb
|
|
31
56
|
- lib/mini_magick.rb
|
|
32
|
-
- mini_magick.gemspec
|
|
33
57
|
- test/actually_a_gif.jpg
|
|
34
58
|
- test/animation.gif
|
|
35
59
|
- test/command_builder_test.rb
|
|
36
|
-
- test/image_temp_file_test.rb
|
|
37
60
|
- test/image_test.rb
|
|
38
61
|
- test/leaves.tiff
|
|
39
62
|
- test/not_an_image.php
|
|
63
|
+
- test/simple-minus.gif
|
|
40
64
|
- test/simple.gif
|
|
41
65
|
- test/trogdor.jpg
|
|
42
66
|
has_rdoc: true
|
|
43
67
|
homepage: http://github.com/probablycorey/mini_magick
|
|
68
|
+
licenses: []
|
|
69
|
+
|
|
44
70
|
post_install_message:
|
|
45
|
-
rdoc_options:
|
|
46
|
-
|
|
71
|
+
rdoc_options: []
|
|
72
|
+
|
|
47
73
|
require_paths:
|
|
48
74
|
- lib
|
|
49
75
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
76
|
+
none: false
|
|
50
77
|
requirements:
|
|
51
78
|
- - ">="
|
|
52
79
|
- !ruby/object:Gem::Version
|
|
80
|
+
hash: 3
|
|
81
|
+
segments:
|
|
82
|
+
- 0
|
|
53
83
|
version: "0"
|
|
54
|
-
version:
|
|
55
84
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
85
|
+
none: false
|
|
56
86
|
requirements:
|
|
57
87
|
- - ">="
|
|
58
88
|
- !ruby/object:Gem::Version
|
|
89
|
+
hash: 3
|
|
90
|
+
segments:
|
|
91
|
+
- 0
|
|
59
92
|
version: "0"
|
|
60
|
-
version:
|
|
61
93
|
requirements: []
|
|
62
94
|
|
|
63
|
-
rubyforge_project:
|
|
64
|
-
rubygems_version: 1.3.
|
|
95
|
+
rubyforge_project:
|
|
96
|
+
rubygems_version: 1.3.7
|
|
65
97
|
signing_key:
|
|
66
|
-
specification_version:
|
|
67
|
-
summary: Manipulate images with minimal use of memory
|
|
98
|
+
specification_version: 3
|
|
99
|
+
summary: Manipulate images with minimal use of memory via ImageMagick / GraphicsMagick
|
|
68
100
|
test_files:
|
|
101
|
+
- test/actually_a_gif.jpg
|
|
102
|
+
- test/animation.gif
|
|
69
103
|
- test/command_builder_test.rb
|
|
70
|
-
- test/image_temp_file_test.rb
|
|
71
104
|
- test/image_test.rb
|
|
105
|
+
- test/leaves.tiff
|
|
106
|
+
- test/not_an_image.php
|
|
107
|
+
- test/simple-minus.gif
|
|
108
|
+
- test/simple.gif
|
|
109
|
+
- test/trogdor.jpg
|
data/.gitignore
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
/pkg
|
data/lib/image_temp_file.rb
DELETED
data/mini_magick.gemspec
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
Gem::Specification.new do |s|
|
|
4
|
-
s.name = %q{mini_magick}
|
|
5
|
-
s.version = "1.2.5"
|
|
6
|
-
|
|
7
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
8
|
-
s.authors = ["Corey Johnson"]
|
|
9
|
-
s.date = %q{2009-05-27}
|
|
10
|
-
s.email = %q{probablycorey@gmail.com}
|
|
11
|
-
s.extra_rdoc_files = [
|
|
12
|
-
"README.rdoc"
|
|
13
|
-
]
|
|
14
|
-
s.files = [
|
|
15
|
-
".gitignore",
|
|
16
|
-
"MIT-LICENSE",
|
|
17
|
-
"README.rdoc",
|
|
18
|
-
"Rakefile",
|
|
19
|
-
"VERSION",
|
|
20
|
-
"lib/image_temp_file.rb",
|
|
21
|
-
"lib/mini_magick.rb",
|
|
22
|
-
"mini_magick.gemspec",
|
|
23
|
-
"test/actually_a_gif.jpg",
|
|
24
|
-
"test/animation.gif",
|
|
25
|
-
"test/command_builder_test.rb",
|
|
26
|
-
"test/image_temp_file_test.rb",
|
|
27
|
-
"test/image_test.rb",
|
|
28
|
-
"test/leaves.tiff",
|
|
29
|
-
"test/not_an_image.php",
|
|
30
|
-
"test/simple.gif",
|
|
31
|
-
"test/trogdor.jpg"
|
|
32
|
-
]
|
|
33
|
-
s.has_rdoc = true
|
|
34
|
-
s.homepage = %q{http://github.com/probablycorey/mini_magick}
|
|
35
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
|
36
|
-
s.require_paths = ["lib"]
|
|
37
|
-
s.rubyforge_project = %q{mini-magick}
|
|
38
|
-
s.rubygems_version = %q{1.3.1}
|
|
39
|
-
s.summary = %q{Manipulate images with minimal use of memory.}
|
|
40
|
-
s.test_files = [
|
|
41
|
-
"test/command_builder_test.rb",
|
|
42
|
-
"test/image_temp_file_test.rb",
|
|
43
|
-
"test/image_test.rb"
|
|
44
|
-
]
|
|
45
|
-
|
|
46
|
-
if s.respond_to? :specification_version then
|
|
47
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
|
48
|
-
s.specification_version = 2
|
|
49
|
-
|
|
50
|
-
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
|
51
|
-
else
|
|
52
|
-
end
|
|
53
|
-
else
|
|
54
|
-
end
|
|
55
|
-
end
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
require 'test/unit'
|
|
2
|
-
require File.join(File.dirname(__FILE__), '../lib/image_temp_file')
|
|
3
|
-
|
|
4
|
-
class ImageTempFileTest < Test::Unit::TestCase
|
|
5
|
-
include MiniMagick
|
|
6
|
-
|
|
7
|
-
def test_multiple_calls_yield_different_files
|
|
8
|
-
first = ImageTempFile.new('test')
|
|
9
|
-
second = ImageTempFile.new('test')
|
|
10
|
-
assert_not_equal first.path, second.path
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def test_temp_file_has_given_extension
|
|
14
|
-
assert_match /^[^.]+\.jpg$/, ImageTempFile.new('jpg').path
|
|
15
|
-
assert_match /^[^.]+\.png$/, ImageTempFile.new('png').path
|
|
16
|
-
end
|
|
17
|
-
end
|