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 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 << 'lib'
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
- # Jewler tasks
29
-
30
- begin
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.5
1
+ 1.3.2
@@ -0,0 +1,2 @@
1
+ require 'mini_magick'
2
+ MiniMagick.processor = :gm
data/lib/mini_magick.rb CHANGED
@@ -1,12 +1,22 @@
1
- require "open-uri"
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 MiniMagickError < RuntimeError; end
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 = ImageTempFile.new(ext)
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+)?$/, ".#{format}")
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 e
94
- raise MiniMagickError, "Unable to format to #{format}; #{e}" unless File.exist?(@path)
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
- args.push(@path) # push the path onto the end
122
- run_command("mogrify", "-#{symbol}", *args)
123
- self
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 $?.exitstatus != 0
157
- raise MiniMagickError, "ImageMagick command (#{command.inspect}) failed: #{{:status_code => $?, :output => output}.inspect}"
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
Binary file
data/test/animation.gif CHANGED
Binary file
@@ -1,5 +1,6 @@
1
+ require 'rubygems'
1
2
  require 'test/unit'
2
- require File.join(File.dirname(__FILE__), '../lib/mini_magick')
3
+ require File.expand_path('../../lib/mini_magick', __FILE__)
3
4
 
4
5
  class CommandBuilderTest < Test::Unit::TestCase
5
6
  include MiniMagick
data/test/image_test.rb CHANGED
@@ -1,5 +1,8 @@
1
+ require 'rubygems'
1
2
  require 'test/unit'
2
- require File.join(File.dirname(__FILE__), '../lib/mini_magick')
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(MiniMagickError) do
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 295, image[:width]
60
- assert_equal 242, image[:height]
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
- image = Image.from_file(ANIMATION_PATH)
65
- image.format "png", 0
66
- assert_equal "png", image[:format].downcase
67
- end
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
- image = Image.from_file(ANIMATION_PATH)
71
- assert_equal image[:size], 76631
72
- end
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 test_mini_magick_error_when_referencing_not_existing_page
142
- image = Image.from_file(ANIMATION_PATH)
143
- assert_raises MiniMagickError do
144
- image.format('png', 31415)
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
@@ -1,604 +1 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
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&amp;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>&nbsp;»&nbsp;<a href="http://forum.textdrive.com/viewforum.php?id=4">Troubleshooting</a></li><li>&nbsp;»&nbsp;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&nbsp;</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>&nbsp;&nbsp;<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&amp;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&nbsp;</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>&nbsp;&nbsp;<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&amp;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&nbsp;</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>&nbsp;&nbsp;<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&amp;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&nbsp;</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>&nbsp;&nbsp;<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&amp;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&nbsp;</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>&nbsp;&nbsp;<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&amp;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&nbsp;</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&amp;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&nbsp;</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>&nbsp;&nbsp;<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&amp;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&nbsp;</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>&nbsp;&nbsp;<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&amp;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&nbsp;</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>&nbsp;&nbsp;<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&amp;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&nbsp;</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&amp;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&nbsp;</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>&nbsp;&nbsp;<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&amp;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&nbsp;</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&amp;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>&nbsp;»&nbsp;<a href="http://forum.textdrive.com/viewforum.php?id=4">Troubleshooting</a></li><li>&nbsp;»&nbsp;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
- version: 1.2.5
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: 2009-05-27 00:00:00 +00:00
20
+ date: 2010-08-02 00:00:00 -07:00
13
21
  default_executable:
14
- dependencies: []
15
-
16
- description:
17
- email: probablycorey@gmail.com
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
- - README.rdoc
48
+ extra_rdoc_files: []
49
+
24
50
  files:
25
- - .gitignore
26
- - MIT-LICENSE
27
51
  - README.rdoc
28
- - Rakefile
29
52
  - VERSION
30
- - lib/image_temp_file.rb
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
- - --charset=UTF-8
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: mini-magick
64
- rubygems_version: 1.3.1
95
+ rubyforge_project:
96
+ rubygems_version: 1.3.7
65
97
  signing_key:
66
- specification_version: 2
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
@@ -1,9 +0,0 @@
1
- require "tempfile"
2
-
3
- module MiniMagick
4
- class ImageTempFile < Tempfile
5
- def make_tmpname(ext, n)
6
- 'mini_magick%d-%d%s' % [$$, n, ext ? ".#{ext}" : '']
7
- end
8
- end
9
- end
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